簡體   English   中英

為什么我的while循環不會終止?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM