我正在尝试将z
的值每 750 个、第 1500 个、第 2250 个循环更改 +1,...,这就是我写的:
len = 1500000;
y = 750;
z = 1;
for i = 1:len
if (i == [y.*(1:2000)])
z = z + 1;
end
end
为什么z
的价值没有改变?有人可以告诉我我的if
陈述有什么问题吗?
MATLAB 仅在所有元素都true
时才认为数组true
。因此,考虑到这一点,如果我们查看您的if
语句的条件
i == (y .* (1:2000))
这将返回一个包含 2000 个值的数组,其中它们要么都是false
的(在i
不是y
的倍数的情况下),要么是除一个true
值之外的所有false
。即使有一个true
,这仍然计算为 false
并且您的if
语句永远不会被评估。
更好的方法是使用 mod
来检查给定i
是否是 y
的倍数
if mod(i, y) == 0
z = z + 1;
end
但是,如果循环的唯一内容是您所显示的内容,那么您可以简单地省略您不关心的迭代。
for i = y:y:len
z = z + 1;
end
如果您确实想像您所示的那样比较数组,最好在循环之外计算y .* 1:2000
然后使用 ismember
查看i
是否在数组中
tmp = y .* (1:2000);
for i = 1:len
if ismember(i, tmp)
z = z + 1;
end
end