【问题标题】:A for loop with several if/if else conditions causing infinite loop具有多个 if/if else 条件的 for 循环导致无限循环
【发布时间】:2016-01-12 18:08:23
【问题描述】:

我目前正在开发一个收银机示例,该示例将零钱读回给一个人。我不允许更改对主函数抽屉的调用。我在其中创建了一个函数,该函数以递减的 for 循环开头。在该 for 循环中,我有一组 if/if else 语句要检查,如果它传递它输入的其中一个条件并检查另一组 if/if else 语句。有时它不会匹配第二组中的任何条件,因为 for 循环 i 没有达到正确的索引。如果它匹配第二组中的一个if/if else 语句将 i++ 添加回来,以便我可以返回并再次检查,以防索引不为空。我不知道是 i++ 给了我无限循环还是我不能回到for循环以增加。我试过用笔和纸检查它,但我没有看到错误。如果您愿意看的话,这就是 codepen:http://codepen.io/RawleJuglal/pen/EPXvQX Function findNextChangeDenom。

for(i=highNumber;i>=0;i--)
 {
   if(condition)
     if(condition)
       {
         do some code
         i++ //add 
       }
     else if(condition)
       {
         do some code
         i++
       }
     else if(condition)
       {
         do some code
         i++
       }
   else if(condition)
   {}
   else
   {}
 }

【问题讨论】:

  • 为什么所有 else if 块都有 i++?那我就一点也不减了。这就是为什么你有一个无限循环
  • 这个想法是,如果它不满足第一组 if/else if 语句,它就不会达到执行 i++ 的第二组,并且会像往常一样继续递减
  • 但是如果它一直通过(你所说的第一组)怎么办?也许这就是正在发生的事情。

标签: infinite-loop


【解决方案1】:

是的,通过在循环内增加 i,您可以使循环终止取决于您未显示的条件。如果你的算法保证会终止,你应该努力通过不增加循环变量来使这个保证显而易见(并确保循环中的每个测试/函数调用都保证终止)。

【讨论】:

    【解决方案2】:

    如果第一个 if 始终为真(或至少很多次),您的变量 i 将永远不会达到 0 值。

    我建议你这样做:

    while(true){
                if(condition){
                    //do your operations
                }else{
                     break;
                }
    }
    

    【讨论】:

      【解决方案3】:

      您似乎误解了 if-elseif 阶梯的构造。程序执行流程基于满足哪个条件流入分支之一。

      在进入 any 分支之前检查可用选项。因此,您不需要明确要求它“返回”并检查另一个条件。

      希望这能清除它!

      【讨论】:

        猜你喜欢
        • 2014-06-07
        • 1970-01-01
        • 1970-01-01
        • 2018-07-08
        • 2021-09-16
        • 2012-06-04
        • 1970-01-01
        • 2017-08-02
        • 2019-12-04
        相关资源
        最近更新 更多