如何在for循环中更新计数器变量

问题描述 投票:2回答:4

假设我有一个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 for-loop counter
4个回答
5
投票

在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.


2
投票

修改循环变量并不是真正的改变循环,你改变的是变量的值。你要改变的是变量 对于该迭代. 相反,你可以告诉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。代码已经适当地更新了。


1
投票

如果我没记错的话,当你调用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。


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
© www.soinside.com 2019 - 2024. All rights reserved.