我正在尝试将z
的值改为 +1 每第750,1500,2250,......等等循环,这就是我写了:
len = 1500000;
y = 750;
z = 1;
for i = 1:len
if (i == [y.*(1:2000)])
z = z + 1;
end
end
为什么z
的值不会改变?有人可以告诉我,我的if
声明有什么问题吗?
答案 0 :(得分:3)
如果所有元素都是true
,MATLAB只会将数组视为true
。因此,如果我们查看您的if
声明的条件
i == (y .* (1:2000))
这返回的是一个包含2000个值的数组,它们全部为false
(在i
不是y
的倍数的情况下)和所有{{1}除了一个false
值之外。即使只有一个true
,这仍然会计算为true
,并且永远不会评估您的false
语句。
更好的方法是使用mod
检查给定的if
是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