3

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

    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 行时存在问题,这是实际输出:

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

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

4

4 回答 4

5

nextInt()不消耗行尾,即使int是那里唯一的东西。

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

于 2012-05-06T06:02:47.707 回答
3

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

于 2012-05-06T06:03:10.740 回答
0

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

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

为了阅读你应该写的那行

scanner.next();
于 2012-05-06T06:24:02.873 回答
0

在 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 文档:

Enter your name
Kanishka
Enter your age
23
Play again?
Yes
Enter your name
....
于 2012-05-06T05:59:30.740 回答