我似乎经常遇到这个问题,我似乎不太了解如何使用扫描仪

System.out.println("Please enter a number");
Scanner choice1 = new Scanner(System.in);
int choiceH = choice1.nextInt();

while(!choice1.hasNextInt()){
    System.out.println("Please enter a number");
    choice1.next();
}


我要代码执行的操作是要求输入一个数字,然后检查输入是否为数字。
我的问题是它来回询问两次,我不知道为什么。

最佳答案

在行中

Scanner choice1 = new Scanner(System.in);


缓冲区将为空。当你到达那条线

int choiceH = choice1.nextInt();


您输入数字,然后按Enter。此后,该编号将存储在缓冲区中并被使用(缓冲区将再次为空)。当你到达那条线

while (!choice1.hasNextInt())


程序将检查缓冲区中是否有int,但此刻它将为空,因此hasNextInt将返回false。因此,条件将为true,程序将再次要求输入int

你怎么解决呢?您可以删除第一个nextInt

System.out.println("Please enter a number");
Scanner choice1 = new Scanner(System.in);
int choiceH = -1; // some default value

while (!choice1.hasNextInt()) {
    System.out.println("Please enter a number");
    choice1.nextInt();
}

10-06 13:40