【问题标题】:while loop within while loop within an elsewhile 循环内的 while 循环内的 else 内
【发布时间】:2015-08-13 05:00:51
【问题描述】:

我在else 语句中有一个while 循环。当while 循环中的条件为真时,我的变量k 递减(k=k-1)。我想让while 循环在k==0 之前停止。我尝试将while 循环放在另一个while 循环(while k>1) 中,认为如果k 下降到1 可能会取消内部循环。有什么想法吗?

if yada yada
    do thing1
else
    while k>1
        while x==true
            k=k-1;
            do thing2
        end
    end
end

【问题讨论】:

  • 内部while循环不应该是if语句吗?
  • 在内部使用if 语句确实应该可以解决问题,即使......我真的不明白你的while 的意义在这里!
  • 我可能在这里过度简化了代码..我正在尝试遍历一个向量(最初这都是在一个 for 循环中),如果满足第一个条件我想做一件事并继续遍历,否则我想查看第二个条件,而第二个条件仍然成立,我想做第二件事,而不管第一个条件导致我使用 else 语句...我认为 else 中的 while 语句是最好的方法是什么?当条件 2 不再为真时,我想返回 for 循环的下一次迭代(即 if/else 语句)
  • @user3470496,如果其中任何一个帮助您解决了问题,请考虑接受答案。这是答案左侧的刻度线。 (有答案但似乎没有答案的问题会在首页混乱,所以接受答案对我们所有人都有好处)=)

标签: matlab loops if-statement while-loop


【解决方案1】:

这不成功吗?

if yada yada
    x = f(x)   %// If you don't have anything here, you should use "if ~yada yada"
               %// instead of "else"
else
    while k>1 && x == true  %// BTW: Lower case t in true 
        x = g(y)  %// I hope you have something more than "k=k-1" in this loop
        k = k-1;
    end
end

【讨论】:

  • 在循环条件中使用&&(即while k>1 && x == true)绝对是要走的路,除了它应该只是while k>1 && x
  • 只是因为x 是一个错误的变量名选择。如果它被称为isChecked 或相关的东西,那么使用== true 会更清楚(至少你用英语说的更接近英语)
【解决方案2】:

你可以将这句话添加到你最里面的最后一件事while

if k <= 1
   break;

【讨论】:

    【解决方案3】:

    由于您的while-loop 基本上实现了反增量,我强烈建议用for-loop 替换它(实际上是两者)。除了更具可读性之外,它还允许 Matlab 应用优化,从而加快执行时间。见这里:

    yadayada = false;
    x = true;
    
    if yadayada
    else
        kmax = 5;          % or whichever maximum value you want k to have
        for k = kmax:-1:2  % have k start at kmax, decrement by 1 each time, until k==2
            fprintf('k = %d\n', k);
    
            % do something useful in the loop
    
            if ~x
                break;
            end
        end
    end
    

    输出:

    k = 5
    k = 4
    k = 3
    k = 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 2016-03-14
      • 2011-06-19
      • 1970-01-01
      • 2018-11-05
      • 2016-07-19
      • 2019-11-10
      相关资源
      最近更新 更多