Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这个无限循环背后的原因是什么?_Java - Fatal编程技术网

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

Java 这个无限循环背后的原因是什么?,java,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

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

你能告诉我我错过了什么吗,谢谢

在第一个示例中,您只设置了一次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);
    }
}
}

您还必须重新计算布尔表达式,以便在循环体中设置值,使其正常工作,如

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。

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

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;
        }
    }
}
您正在将布尔变量设置为布尔值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时,条件变为false,循环终止。

这个小实验是否清楚表明,您的布尔变量get只计算了一次,不再关心它是如何初始化的,也就是说,它不需要当值更改时更新自身?还有什么不清楚的呢?在第一种情况下,myBoolean的值在您更改值时不会更改。在第二种情况下也不需要,但这并不重要,因为您从不使用它的值。Boolean=0有什么不需要理解的?请阅读一些教程,解释一下一段时间是如何工作的。在这两个例子中,myBoolean只设置了一次。你说的避免使用幻数是什么意思?为什么要使用变量限制而不是只写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;
        }
    }
}
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;
        }
    }
}