【问题标题】:Loop while and if statement priorities循环 while 和 if 语句的优先级
【发布时间】:2013-11-27 08:50:34
【问题描述】:

我创建了这个简单的类,因为我刚刚意识到,我不明白 if 语句在 while 循环中是如何工作的。我似乎不明白他们的优先级如何??

为什么这段代码会出现我没有得到的无限循环??你能解释一下吗?

package sam;
public class Sam {


    public static void main(String[] args) {
        boolean actif = true;
        boolean wake = false;
        while(actif==true ){
            System.out.println("Statut :"+actif);

            if(actif && wake){
                System.out.println("Actif :"+actif);
                System.out.println("Wake :"+wake);
                if(wake){
                    System.out.println("Wake est activé");
                }   
                if(actif){
                    actif=false;
                }
            }
        }
    }
}

我知道,如果我将其作为第一个条件向下移动,则循环会正确中断:

  if(actif){
            actif=false;
        }

你能告诉我吗?

【问题讨论】:

  • 您使用的语言应该始终是您的标签之一。并且标签也不应该出现在标题中。最后,在发布代码时,突出显示该块并点击{} 按钮,以便将其正确格式化为代码。 (并且,与语言标签一起,我们得到语法高亮)
  • 在一个循环内测试actif,该循环仅在actiftrue 时才执行,并且在由于外部测试完全没有意义而没有更改的地方。
  • 不要写while(actif==true ),因为while(actif) 已经说明了一切。

标签: java loops if-statement while-loop


【解决方案1】:

你还没有结束你的 if 语句:

if(actif && wake){
           System.out.println("Actif :"+actif);
           System.out.println("Wake :"+wake);
        if(wake){
            System.out.println("Wake est activé");
        }   
        if(actif){
            actif=false;
        }

        }

你在这个永远不会被执行的 if 语句中设置了 actif = false。

ideally it should be : 
if(actif && wake){
           System.out.println("Actif :"+actif);
           System.out.println("Wake :"+wake);
}
        if(wake){
            System.out.println("Wake est activé");
        }   
        if(actif){
            actif=false;
        }

【讨论】:

  • 没有“if循环”之类的东西
  • 改为if语句
【解决方案2】:

正确缩进代码将立即显示为什么 actif 永远不会设置为 false。

wake 从 false 开始,所以第一个 if 条件永远不会为真。

【讨论】:

    【解决方案3】:

    通过查看您的示例,if 条件,

    if(actif){ actif=false; } 在另一个 if 条件内

    if(actif && wake){
           System.out.println("Actif :"+actif);
           System.out.println("Wake :"+wake);
        if(wake){
            System.out.println("Wake est activé");
        }   
        **if(actif){
            actif=false;**
        }
    
        }
    

    正如您在 while 循环之前提到的 boolean wake = false;,Wake 始终是 false,所以它永远不会转到 above if conditonal statements,所以始终是 actif=true,如 while 循环之前所述。这就是代码进入无限循环的原因。

    希望你得到。

    【讨论】:

      【解决方案4】:

      这里解释了为什么你的代码会处于无限循环中。

      在您的代码中,您声明了 2 个变量,如下所示:

       boolean actif = true;
       boolean wake = false;
      

      while循环中的if-condition if (actif && wake) {,总是false

      那么下面的代码永远不会被执行。

          if(actif){
              actif=false;
          } 
      

      所以,actif 将始终true

      因此,while 循环条件 while(actif==true ){ 将始终为真。并出现无限循环。

      重新整理你的想法,做出一些改变,在某个地方将 actif 设置为 false,从而停止无限循环。前进。 :)

      【讨论】:

        【解决方案5】:

        很简单,当它进入while循环时,它会检查第一个if条件

        if(actif && wake)
        

        计算结果为 false ,因为其他所有内容都在这个 if 块中,这意味着没有执行任何其他操作,它会返回到 while 循环的第二次迭代。同样的事情再次发生,并且由于第一个 if 循环再次评估为 false,循环进入无限递归。您必须操纵任一标志,即 actif/wake 以使 if 循环评估为 true,否则循环将永远不会中断。

        【讨论】:

          【解决方案6】:

          你的第一个 if 条件 -- if(actif && wake) -- 在 while 循环中包含

          if(actif){
             actif=false;
          }
          

          并且因为您在开始时将 wake 设置为 false,所以该代码永远不会执行,因为 aktif && wake 为 false。 If 影响其后 {} 内的 als 代码。 也可以看看: enter link description here

          【讨论】:

            猜你喜欢
            • 2013-06-09
            • 2016-01-12
            • 2017-07-14
            • 2012-06-18
            • 1970-01-01
            • 2015-05-19
            • 2017-08-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多