Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 如何重新计算while循环条件_Java_While Loop_Java.util.scanner - Fatal编程技术网

Java 如何重新计算while循环条件

Java 如何重新计算while循环条件,java,while-loop,java.util.scanner,Java,While Loop,Java.util.scanner,我遇到了下面的代码片段 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan=new Scanner(System.in); boolean flag = scan.hasNext(); while(flag){ System.out.println(scan.nex

我遇到了下面的代码片段

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner scan=new Scanner(System.in);
        boolean flag = scan.hasNext();
        while(flag){
            System.out.println(scan.nextLine());
        }
        System.out.println("End");
    }
}
布尔标志一旦赋值为true或false,就不应再次更改,但我发现每当我在终端中键入某个内容时,while循环就会再次执行

有人能解释一下,每当我在终端中键入某些内容时,标志是如何重新计算的吗


注意:我的问题不是关于停止/关闭扫描仪,而是关于了解如何重新评估循环条件。

我认为您在这里遇到的是scan.hasNext阻塞,直到第一次输入

那么,旗帜总是正确的


一旦进入循环,您将打印下一行,但scan.nextLine也会阻塞,直到您提供一个下线,即带有行尾的输入。

您需要放置布尔标志=scan.hasNext;scan.nextLine;在布尔值之后,有人能解释一下标志是如何重新计算的吗:它总是被计算为相同的值,这正是问题所在,因为你给标志分配了一个值一次,再也没有了。也就是说,scan.hasNext只计算一次。@JBNizet在这种情况下,如果第一次将标志设置为true,为什么while循环不会进入无限循环time@Vivek我敢肯定是的。你是如何确定它不会进入无限循环的?@Turing85你是对的,我很困惑,因为我不知道nextLine也会阻塞