简单的Java代码扫描仪无法正常工作[复制](Simple Java Scanner code no

2019-09-17 01:25发布

这个问题已经在这里有一个答案:

  • 使用nextLine时,扫描仪发出后nextXXX [复制]

下面是一些基本的代码我写做一个简单的游戏骨架:

    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
...

然而,与再次读取播放线的问题,这是实际的输出:

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

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

Answer 1:

nextInt()不消耗结束行,即使int是唯一的东西在里面。

添加另一个nextLine()读取后, int ,并要么完全放弃它的价值,或检查,如果你想阻止人们进入什么,但一个int它是空的。



Answer 2:

问题是,调用nextInt()后仍有缓冲区中的“\ n”和所以这就是传递。 使用in.next()代替in.nextLine()。



Answer 3:

在扫描仪类代替nextLine()方法使用next()方法。

    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
....


Answer 4:

你应该使用下面的代码下一行读数。

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

而对于读取行,你应该写

scanner.next();


文章来源: Simple Java Scanner code not working [duplicate]