假设我有一个for循环,从10减少到1,计数器' k'。在for循环中,当' k'变为5,我使k = 4。当我输出' k'在每个循环中,我预期" 10 9 8 7 6 5 3 2 1",跳过4.相反,我将所有数字从10减少到1.我怎样才能使它跳过4?
for k=10:-1:1
if i==5
k=i-1;
end
end
答案 0 :(得分:3)
您无法在MATLAB中的循环内修改循环索引。您的两个选项是在循环之前省略该索引值
numbers = 10:-1:1;
numbers(numbers == 4) = [];
for k = numbers
% Stuff
end
或者您可以使用while
循环而不是for
循环
k = 10;
while k > 0
if k == 5
k = k - 1;
end
k = k - 1;
end
或者您也可以执行@beaker向continue
建议的内容。
答案 1 :(得分:1)
修改循环变量并不是真正改变循环。您要更改的是该迭代的变量的值。相反,您可以使用continue
告诉MATLAB跳到下一次迭代:
for k=10:-1:1
if k==4
continue
end
disp(k)
end
结果:
10
9
8
7
6
5
3 <-- skipped 4
2
1
编辑:我刚刚意识到你想要跳过4而不是5.代码已经适当更新。
答案 2 :(得分:1)
如果我没记错的话,Matlab会在你调用for循环时创建一个数组。如果输入
i = 10:-1:1
你最终得到了
i =
10 9 8 7 6 5 4 3 2 1
我建议做这样的事情:
for i = [10:-1:6, 4:-1:1]
i
<do some other stuff here>
end
这使我们从10减少到1跳过5。
答案 3 :(得分:0)
这是另一种方法
NumbertoSkip = [4];
for k=10:-1:1
if(~ismember(NumbertoSkip,k))
disp(k)
end
end
代码检查当前k是否存在于它显示的NumbertoSkip
向量中
您可以跳过任何数字,只需将其放在NumbertoSkip
向量中,例如NumbertoSkip = [4 5];
% 10
%
% 9
%
% 8
%
% 7
%
% 6
%
% 3
%
% 2
%
% 1