【问题标题】:Simple Java Scanner code not working [duplicate]简单的 Java 扫描程序代码不起作用 [重复]
【发布时间】:2012-05-15 03:45:28
【问题描述】:

这是我为制作一个简单游戏而编写的一些基本代码的框架:

    Scanner in = new Scanner(System.in);

    String name;
    String playing;
    int age;

    do {

        System.out.println("Enter your name");
        name = in.nextLine();

        System.out.println("Enter your age");
        age = in.nextInt();

        System.out.println("Play again?");
        playing = in.nextLine();

    } while (true);

代码没有按预期工作,例如,这是代码的预期功能:

Enter your name
John
Enter your age
20
Play again?
Yes
Enter your name
Bill
...

但是,读取 Play again 行时存在问题,这是实际输出:

Enter your name
John
Enter your age
20
Play again?
Enter your name

如您所见,“请输入您的姓名”在“再次播放?”之前再次显示。能够接受输入。调试时播放变量设置为“”,因此我看不到任何输入,也无法弄清楚正在消耗什么。 任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: java loops java.util.scanner


    【解决方案1】:

    在 Scanner 类中使用 next() 方法而不是 nextLine() 方法。

        Scanner in = new Scanner(System.in);
    
        String name;
        String playing;
        int age;
    
        do {
    
            System.out.println("Enter your name");
            name = in.next();
    
            System.out.println("Enter your age");
            age = in.nextInt();
    
            System.out.println("Play again?");
            playing = in.next();
    
        } while (true);
    

    更多信息请参考Java Documentation for Scanner class 输出:

    Enter your name
    Kanishka
    Enter your age
    23
    Play again?
    Yes
    Enter your name
    ....
    

    【讨论】:

    • 这是为什么,使用 nextLine() 有什么问题?
    • 如果有人输入Kanishka Dilshan 作为他们的名字会怎样?
    【解决方案2】:

    nextInt() 不会消耗行尾,即使 int 是其中唯一的东西。

    在读取int 后添加另一个nextLine(),或者完全丢弃它的值,或者如果你想阻止人们输入除 int 之外的任何内容,请检查它是否为空。

    【讨论】:

    • 感谢您的帮助,这很有道理。
    【解决方案3】:

    问题是在调用 nextInt() 之后缓冲区中仍然有一个 '\n' ,所以这就是传递的内容。使用 in.next() 而不是 in.nextLine()。

    【讨论】:

    • 使用next 是个坏主意。如果有人输入 a b c 作为名称会怎样?
    【解决方案4】:

    您应该使用以下代码进行下一行阅读。

    Scanner scanner = new Scanner(System.in).useDelimiter("\n");
    

    为了阅读你应该写的那一行

    scanner.next();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-10
      • 2011-04-06
      • 2020-12-03
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      相关资源
      最近更新 更多