使用扫描仪时,有没有办法检查用户输入是否符合预期?
说我想要一个双精度但用户输入一个String我该怎么做才能提示用户重新输入一个双倍的值?
如果未输入数字,则使用以下代码,我会收到mismatchException。如果输入错误,我不希望程序崩溃。
这是我的代码: import java.util.Scanner;
public class RoundingNumbers {
private double y;
private double x;
public RoundingNumbers(){
double y = 0;
double x = 0;
}
public void getNumber(){
System.out.print("Enter a decimal number: ");
Scanner num = new Scanner(System.in);
x = num.nextDouble();
}
public void roundNum(){
y = Math.floor(x + 0.5);
}
public void displayNums(){
System.out.println("The actual number is: " + x);
System.out.println("The rounded number is: " + y);
}
}
答案 0 :(得分:1)
您可以将其包装在try catch块中。请参阅以下示例函数。
糟糕。我没有给予足够的关注,也没有看到你的代码示例。
将getNumber()函数更改为以下定义。请注意,有许多不同的方法可以做到这一点。这只是一个例子。
public void getNumber(){
Scanner num = new Scanner(System.in);
while(true) {
System.out.print("Enter a decimal number: ");
try {
x = num.nextDouble();
break;
catch(InputMismatchException e) {}
}
}
答案 1 :(得分:0)
您已经注意到,如果他们没有输入您期望的内容,则会收到InputMismatchException。考虑到这一点,您可以使用try-catch块包围x = num.nextDouble()
并检查这种异常。例如:
while (true) {
try {
x = num.nextDouble();
// move along if no exception is thrown
break;
} catch (InputMismatchException e) {
// give the user an error message
System.out.println("Type mismatch when reading your input. Please insert a double: ");
}
}
顺便说一句,这与您的问题没有直接关系,但您不应将您的Scanner变量命名为num
,因为该名称不会让任何人想到扫描仪 - 人们通常会认为它是int
或其他东西。给出适合它们的变量名称是一种很好的编程习惯。