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

时间:2016-06-18 00:29:40

标签: matlab for-loop counter

假设我有一个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

4 个答案:

答案 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