【问题标题】:How is the while loop condition re-evaluated again如何再次重新评估while循环条件
【发布时间】:2019-12-26 02:59:11
【问题描述】:

我遇到了下面的代码sn-p

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 循环都会再次执行。

有人可以解释一下每当我在终端中输入内容时如何重新评估标志吗?

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

【问题讨论】:

  • 你需要在布尔值后面加上boolean flag = scan.hasNext(); scan.nextLine();
  • 有人可以解释如何重新评估标志:它总是被评估为相同的值,这正是问题所在,因为您将值分配给flag一次,再也不会。 IE。 scan.hasNext() 只计算一次。
  • @JBNizet 在这种情况下,如果标志第一次设置为 true,为什么 while 循环不会进入无限循环
  • @Vivek 我很确定确实如此。你是如何确定它没有进入无限循环的?
  • @Turing85 你是对的,我很困惑,因为我不知道 nextLine 也会阻塞

标签: java while-loop java.util.scanner


【解决方案1】:

我认为您在这里遇到的是 scan.hasNext() 在您第一次输入之前一直阻塞。

那么,标志总是为真。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多