这种无限循环背后的原因是什么?

时间:2017-02-11 19:29:28

标签: java

我是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;
        }
    }
}

当我运行它时,我得到一个无限循环,但是如果我改变了&#34;而#34;像这样的论点:

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

你能告诉我我在这里失踪了吗,谢谢你!

3 个答案:

答案 0 :(得分:1)

必须还重新评估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

答案 1 :(得分:0)

在您的第一个示例中,您只设置一次“myBolean”,并且永远不会再次更改该值。这就是你的循环无止境的原因。

在第二个示例中,检查值&lt; 5,循环的每次运行。

如果你将这个asignment移动到你的循环中,它也会起作用。

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);
    }
}

}

答案 2 :(得分:0)

原因很简单,在第一种情况下

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);,当值初始化为零时,该值为true。并且你以后不会改变它,所以你最终会陷入无限循环

在第二种情况下

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时,条件变为false并且循环终止。