gpt4 book ai didi

java - 为什么 Java 要求我再次按下 Enter?

转载 作者:太空狗 更新时间:2023-10-29 22:59:20 24 4
gpt4 key购买 nike

我绞尽脑汁想了解 Scanner 的工作原理已经有一段时间了。所以这是代码:

Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String p = sc.nextLine();
System.out.println(s);
System.out.println(p);
System.out.println(sc.hasNextLine());

我的期望:

Love is good  <- press ENTER
Love is blind <- press ENTER
Love is good <- output
Love is blind <- output
false

拥有:

Love is good   <- I press ENTER
Love is blind <- I press ENTER
Love is good <- output
Love is blind <- output
<- press ENTER
true <- output

不明白的地方:

  1. 而不是立即打印这一行 - System.out.println(sc.hasNextLine()); - 它让我再次按下 ENTER 键
  2. 当没有更多的线条或符号时,它打印 true 而不是 false

读过的内容:我已经阅读了很多关于在 nextInt() 之后使用 hasNextLine() 以及 nextInt() 如何不消耗 final 的 stackoverflow 答案符号,但我不明白为什么,即使我在这里不使用 nextInt(),我仍然需要再按一次 ENTER 以及为什么 hasNextLine() 为真。

最佳答案

像这样使用 BufferedReader 而不是 Scanner:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Test {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

String s = reader.readLine();
String p = reader.readLine();
System.out.println(s);
System.out.println(p);
System.out.println(reader.ready());
}
}

有关此事的更多信息,请查看 herehere .根据经验,当您需要解析内容(如 nextInt)时,请使用 Scanner,否则请使用 BufferedReader。 BufferedReader 也比 Scanner 快很多。

至于为什么会出现这种麻烦的行为,请参阅 javadoc对于扫描仪

适用于您的特定情况的部分是:

A scanning operation may block waiting for input.

在您的情况下,这意味着:在 Scanner 读取前两行之后,Scanner 正在等待输入,这是由其方法调用 引起的sc.hasNextLine()。然后当 Enter 被击中时,它得到一个输入(因此它打印 true,根据 docs 当有输入时它返回 true) .在方法调用 sc.hasNextLine() 之后,您的程序中不再有可执行行,程序结束,给人一种它需要 两次 输入命中的错觉。 p>

关于java - 为什么 Java 要求我再次按下 Enter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34836931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com