假设我有一个for循环,用计数器从10往下数到1。k
. 在循环中,当 k
变成5,我做 k=4
. 当我输出 k
在每个循环中,我希望它能跳过4,就像这样,但我得到了从10到1的所有数字,它没有跳过4。
10 9 8 7 6 5 3 2 1
我得到了从10到1的所有数字,但没有跳过4 我怎么才能让它跳过4呢?
for k=10:-1:1
if i==5
k=i-1;
end
end
在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
.
修改循环变量并不是真正的改变循环,你改变的是变量的值。你要改变的是变量 对于该迭代. 相反,你可以告诉MATLAB跳到下一个迭代,使用 continue
:
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。代码已经适当地更新了。
如果我没记错的话,当你调用for循环时,Matlab会创建一个数组。 如果你输入
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。
这里有一个替代方法
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