[英]Why won't my while loop terminate?
我注意到在Java程序中使用while循環時,使用布爾類型終止時似乎無法正常工作。 我輸入了一些簡單的東西來測試它。 代碼通過i = 9完成,然后將測試打印為false。
public class LoopTesting {
public static void main(String[] args) {
boolean test = true;
while(test) {
for (int i = 1; i < 10; i++) {
System.out.println(i);
if(i == 5) test = false;
}
}
System.out.println(test);
}
}
編輯:為響應afzalex的答案,我測試了此代碼:
while(test) {
for (int i = 1; i < 10; i++) {
System.out.println(i);
}
test = false;
for(int i = 11; i < 20; i++) {
System.out.println(i);
}
}
它打印到19。
您在for循環中更改了test
值。 但是for
循環的條件是i < 10
,不是test
。
因此, for
循環,請繼續進行迭代直到結束。
然后,當控件位於for
循環內時,while被終止,因為您已將test
設置為false
。
這就是你想要的
while(test) {
for (int i = 1; i < 10; i++) {
System.out.println(i);
if(i == 5) {
test = false;
break;
}
}
}
或更簡單
int i = -1;
while(test) {
i++;
System.out.println(i);
if(i == 5) {
test = false;
}
}
while
循環無法關閉的問題是因為您的代碼中嵌入了for
循環。 發生的是,您的代碼將進入while
循環,因為while(test)
將導致true
。 然后,您的代碼將進入for
循環。 在for循環中,您的代碼從1-10開始循環。 該循環基於Integer
數值i
。 內部循環基本上是說while(i < 10)
,因此此內部循環不受test的boolean
值影響。
while(test) { // This loop will continue to run until test == false
for (int i = 1; i < 10; i++) { // This loop will continue to run until i > 9
test = false; // This will execute on the first loop of the inner loop, but it is not checked at the outer loop until the inner loop is complete
}
}
希望有道理。 您的問題是布爾值對應於外部循環,沒有什么阻止內部循環運行。
您的邏輯有誤。 在內部for循環完成之前,不會檢查test
變量。 如果您只想迭代5次,則可以執行以下操作:
while(test) {
for (int i = 1; i < 10; i++) {
System.out.println(i);
if(i == 5){
test = false;
break;
}
}
}
但是您可能想要執行以下操作:
...
int i = 1;
while(test) {
if(i == 5)
test = false
else i++;
}
如果用簡單的if / goto替換一會兒和第二個問題,則第二個問題代碼如下所示。 也許這對您來說更容易理解:
loopA: // while
if (test) {
int i1 = 1;
loopB: // for 1
if (i1 < 10) {
System.out.println(i1);
i1++;
goto loopB;
}
test = false;
int i2= 11;
loopC: // for 2
if (i2 < 20) {
System.out.println(i2);
i2++;
goto loopC;
}
goto loopA;
}
System.out.println(test);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.