循环while和if语句优先级

时间:2013-11-27 08:50:34

标签: java loops if-statement while-loop

我已经创建了这个简单的类,因为我刚刚意识到,我不明白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;
        }

你可以告诉我吗?

6 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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;
        }

答案 2 :(得分:1)

这是解释为什么你的代码将处于无限循环中的解释。

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

 boolean actif = true;
 boolean wake = false;

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

然后永远不会执行以下代码。

    if(actif){
        actif=false;
    } 

因此,actif将始终 true

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

重新组织你的想法,做一些改变,在某些地方将actif设置为false,以阻止无限循环。前进。 :)

答案 3 :(得分:1)

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

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

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 :(得分:0)

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

if(actif && wake)

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

答案 5 :(得分:0)

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

if(actif){
   actif=false;
}

因为你在开始时将wake设置为false,所以这段代码永远不会被执行,因为aktif&&醒来是假的。 如果在{}之后影响als代码。 也可以看看: enter link description here