[英]What is the reason behind this infinite loop?
我是 Java 新手,我寫了一段代碼來練習循環,這里是:
public class scratch {
public static void main(String args[]) {
int value = 0;
boolean myBoolean = (value < 5);
while(myBoolean) {
System.out.println(value);
value = value + 1;
}
}
}
當我運行它時,我得到一個無限循環,但如果我像這樣改變“while”參數:
public class scratch {
public static void main(String args[]) {
int value = 0;
boolean myBoolean = (value < 5);
while(value < 5) {
System.out.println(value);
value = value + 1;
}
}
}
它有效,這是輸出:
0
1
2
3
4
你能告訴我我在這里缺少什么嗎,謝謝!
您還必須重新評估boolean
表達式以在循環體中設置您的值以使其工作,例如
final int LIMIT = 5; // <-- try to avoid magic numbers.
boolean myBoolean = (value < LIMIT); // <-- assigns the result of the expression
// `value < LIMIT` to `myBoolean`.
while(myBoolean) {
System.out.println(value);
value = value + 1; // <-- value++;
myBoolean = (value < LIMIT);
}
如果沒有更新myBoolean
最后一行,當myBoolean
為true
,它將始終為true
。
在您的第一個示例中,您只設置了一次“myBolean”,並且再也不會更改該值。 這就是為什么你的循環無休止地運行。
在第二個示例中,您檢查每次循環運行的值 < 5。
如果您將該分配移動到您的循環中,它也會起作用。
public class scratch {
public static void main(String args[]) {
int value = 0;
boolean myBoolean = true;
while(myBoolean) {
System.out.println(value);
value = value + 1;
myBoolean = (value < 5);
}
}
}
原因很簡單,第一種情況
public class scratch {
public static void main(String args[]) {
int value = 0;
boolean myBoolean = (value < 5);
while(myBoolean) {
System.out.println(value);
value = value + 1;
}
}
}
您將布爾變量設置為boolean myBoolean = (value < 5);
這是真的,因為值被初始化為零。 你以后不會改變它,所以你最終陷入了無限循環
而在第二種情況下
public class scratch {
public static void main(String args[]) {
int value = 0;
boolean myBoolean = (value < 5);
while(value < 5) {
System.out.println(value);
value = value + 1;
}
}
}
您正在增加循環中的值並比較值本身以便循環繼續進行,因此當值變為5
,條件變為假並且循環終止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.