【问题标题】:Java: Scanner's next() acts differently in Scite and command promptJava:扫描程序 next() 在 Scite 和命令提示符中的行为不同
【发布时间】:2012-01-02 00:36:29
【问题描述】:

我正在尝试一个使用 Scanner 及其方法 next() 的非常简单的 Java 程序,但不知何故我遇到了一个奇怪的情况。这是代码:

import java.util.Scanner;
public class Test
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        String input = "";

        System.out.println("Enter a sentence here: ");

        while(!input.endsWith("."))
        {
            input = scan.next();
            System.out.println("Echo: " + input);
        }
    }
}

如果我在 Scite 中运行它,每次我在一个单词后面输入一个空格,“Echo:”行 + 输入的单词就会在空格后面打印出来。

假设我像这样在键盘上输入:

apple orange mango.

在 scite 中它看起来像这样:

Enter a sentence here:
apple Echo: apple
orange Echo: orange
mango. Echo: mango.

但如果我在命令提示符下运行它并输入相同的输入,它会如下所示:

Enter a sentence here: 
apple orange mango.
Echo: apple
Echo: orange
Echo: mango.

注意:在命令提示符下运行时,我必须在输入“apple orange mango”后按回车键。否则它不会打印“Echo”句子。还尝试了 NetBeans 中的代码,它给出了与命令提示符相同的结果。

为什么程序的行为不同?

【问题讨论】:

    标签: java java.util.scanner next scite


    【解决方案1】:

    缓冲。在命令提示符下,显然在 NetBeans 中,标准输入流是行缓冲的,因此您的应用程序在输入换行符(或缓冲区已满)之前不知道您输入了任何内容。 Scite 显然不对输入流进行行缓冲,而是在每个字符之后或每个空格处刷新它。

    【讨论】:

    • 另请记住,两种情况下 stdout 的结果都是一样的。
    • 抱歉回复晚了,但非常感谢您的回复!我现在明白了:)
    • @ABVincita:我代表 Daniel,建议您通过单击复选标记图标来接受答案。这样,社区就会知道问题已解决。
    • @Helgi 哦,谢谢你告诉我!原谅我的新手:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多