我已经创建了这个简单的类,因为我刚刚意识到,我不明白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;
}
你可以告诉我吗?
答案 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