簡體   English   中英

這個無限循環背后的原因是什么?

[英]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最后一行,當myBooleantrue ,它將始終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.

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