我很难弄清楚如何正确使用扫描仪来验证用户输入。例如,程序需要有一个用户输入int,用户只能输入正数,如果用户输入“apple”,“美味苹果”或负数,问题就会显示错误信息。我已经尝试了下面的代码,然后我发现了一个令人不安的问题,“这不是一个数字!”打印两次,我不知道是什么导致了这个问题......
import java.util.*;
public class input {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int number;
do {
System.out.println("Please enter a positive number!");
while (!sc.hasNextInt()) //scan
{
System.out.println("That's not a number!");
sc.nextLine(); //scan
}
number = sc.nextInt();
}
while (number <= 0);
System.out.println("Thank you! The positive number is " + number);
}
}
Here is the result:
Please enter a positive number!
dfd
That's not a number!
-2232
Please enter a positive number!
dfd dfd
That's not a number!
That's not a number!
我意外地通过在“number = sc.nextInt()”下面添加额外的代码来解决问题,现在我的代码变成了:
import java.util.*;
public class input {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number;
do {
System.out.println("Please enter a positive number!");
while (!sc.hasNextInt()) //scan
{
System.out.println("That's not a number!");
sc.nextLine(); //scan
}
number = sc.nextInt();
sc.nextLine(); //scan
}
while (number <= 0);
System.out.println("Thank you! The positive number is " + number);
}
}
Here is the result:
Please enter a positive number!
dfd
That's not a number!
-2323
Please enter a positive number!
dfd dfd
That's not a number!
fdfd 322
That's not a number!
23 sdfd
Thank you! The positive number is 23
这次“那不是一个数字”只打印了一次,但我真的不明白为什么通过把“sc.nextLine()”帮助解决问题......
然而,我又提出了另一个问题,如果我还要在输入类似“23 sdfd”,“23 2323”的内容时验证用户输入,该问题仍然提供了提示用户重试的信息直到他们输入正确的int?
答案 0 :(得分:0)
这是因为number = sc.nextInt();
在您输入-2232
后没有使用换行符。所以它评估了换行符,确定它不是int,并提示“那不是数字!”。然后你输入dfd dfd
,它确定那不是一个int,并提示“那不是一个数字!”试。
您的编辑通过在int中读取后使用换行符来解决问题。
请参阅Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods