【问题标题】:How to update counter variable in a for loop如何在 for 循环中更新计数器变量
【发布时间】:2016-06-18 00:29:40
【问题描述】:

假设我有一个从 10 到 1 的 for 循环,计数器为 k。在循环中,当k 变为 5 时,我生成k=4。当我在每个循环中输出 k 时,我希望它会像这样跳过 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


    【解决方案1】:

    您不能在 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】:

      修改循环变量并没有真正改变循环。您要更改的是该迭代的变量的值。相反,您可以使用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。代码已适当更新。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 这使您可以在将来需要时保留 i 的变量。值得一提的是,以这种方式进行操作,并了解数组的工作原理可能会在将来为您省去一些痛苦。
        【解决方案4】:

        这是另一种方法

        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
        

        【讨论】:

          猜你喜欢
          • 2021-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多