【问题标题】:Input line from Scanner object gets printed before official print commandScanner 对象的输入行在正式打印命令之前打印
【发布时间】:2019-04-12 09:18:03
【问题描述】:

我在下面有一个以下方法,它接收一个包含 N 行的 Scanner 对象,每行都有一个单字字符串。

    public static void longestName(Scanner console, int n) {

        for (int i = 1; i <= n; i++) {

          System.out.println("name #" + i + "?" + " " + console.nextLine());

        }

    }

而不是这个(预期输出)...

name #1? roy
name #2? DANE
name #3? Erik
name #4? sTeFaNiE
name #5? LaurA

...我明白了

roy
name #1? roy
DANE
name #2? DANE
Erik
name #3? Erik
sTeFaNiE
name #4? sTeFaNiE
LaurA
name #5? LaurA

为什么 Scanner 对象中的“nextLine()”会在实际打印命令输出之前打印一次?

****** 这是我正在使用的一个练习题,他们只要求我定义一个方法“longestName”,该方法接受一个 Scanner 对象和一个整数“n”,表示 Scanner 对象中的名称数量.

上面的输出是该方法与具有“n”个名称的 Scanner 对象一起使用的结果。

【问题讨论】:

  • 请发布完整代码。
  • 呃那不就是你自己输入的文字,然后是代码的输出吗?
  • @OpenSauce - 嗯?我手动发布了输出。我在运行我输入的代码的网站上用于练习问题的代码。它显示了我在上面发布的输出。
  • @Edson 扫描仪从某个地方获取输入,大概是您在控制台中输入的。由于您在控制台中键入,因此您键入的内容会出现在控制台中。混乱可能来自您将代码放入网站,这使得您的输入看起来与控制台内容分开。如果您只是将代码作为独立的 Java 应用程序运行,那就更清楚了。
  • @OpenSauce - 是的,我明白你现在问什么了,我编辑了我的帖子并附上了解释。

标签: java java.util.scanner user-input system.out console-input


【解决方案1】:

这将为您提供预期的输出:

System.out.println("name #" + i + "?" + " ");
console.nextLine();

【讨论】:

  • 谢谢,在我使用“print”而不是“println”后它起作用了。关于为什么原始代码不能正常工作的任何想法?
  • 在构造要打印的字符串时,java 会在打印到控制台之前尝试获取输入。该函数必须在该行打印出来之前完成
【解决方案2】:

不是多次打印,而是您自己在控制台中输入的文本。如您所见,您输入Erik,然后它才会处理您的打印语句并打印name #3? Erik,其中Erik是您输入的文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多