【问题标题】:Scanner hasNext() infinite loop when displayed with printf() and nextInt() method使用 printf() 和 nextInt() 方法显示时,Scanner hasNext() 无限循环
【发布时间】:2020-07-02 02:23:40
【问题描述】:

我有这段代码在 do-while 循环中询问姓名和年龄:

public class Test1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        do  {
            System.out.print("Enter name & age: ");
            System.out.printf("%s %d",
                        scanner.next(), scanner.nextInt());
        } while (scanner.hasNext());
    }
}

它输出:

Enter name & age: test 6
test 6

然后似乎对我的输入没有反应,虽然它应该在第三行重复了这个问题。这里有什么问题?

【问题讨论】:

标签: java


【解决方案1】:

我认为这应该在它获得输入时停止,因为当你按下回车键时,它会自动输入输入并且你的方法会结束。

如果您想要无限输入,我建议您使用 while(true) 语句。如果您这样做,则不应出现该问题。

【讨论】:

  • 一个好的答案还包括实现您所描述的代码。
【解决方案2】:

java.util.Scanner.hasNext() 方法 如果此扫描器的输入中有另一个标记,则返回 true。此方法可能会在等待输入扫描时阻塞。扫描仪不会超过任何输入。 Read more

为了避免被 hasNext() 阻塞,你可以简单地传递 true for 循环条件。

import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        do  {
            System.out.print("Enter name & age: ");
            System.out.printf("%s %d", scanner.next(), scanner.nextInt());
        } while (true);
    }
}

【讨论】:

  • 无限循环。
  • 是的,确实如此。根据这个问题的要求和给定的代码,它表明它需要一个无限循环。
  • 好吧,但是这样的代码有什么用。
  • 这种代码一般用于菜单驱动程序。重复提示的菜单写在 do while 循环中(您也可以使用任何其他循环,但这更合乎逻辑,因为它是一个入口控制循环)。我见过有人制作小游戏,比如让用户用电脑玩石头剪刀布。
猜你喜欢
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 2011-12-19
  • 1970-01-01
  • 2012-05-16
相关资源
最近更新 更多