为什么我的try-catch方法没有显示我为输入的String而不是integer编写的错误消息?(Java)


System.out.println(" ");
System.out.println("Stage 4: Enter an integer between 5 and 500:");
IntEntry = keyedInput.nextInt();
if(IntEntry > 5 && IntEntry < 500)
{
System.out.println("You will go to stage 5.");
}
else
{
try
{
while(IntEntry < 5 || IntEntry > 500)
{
System.out.println("Try Again. Enter an integer that is between 5 and 500 characters long. “z”.");
IntEntry = keyedInput.nextInt();
}
}
catch(NumberFormatException e)
{
System.out.println("Try Again. Enter an integer between 5 and 500:.");
}
}

上面是我试图获得用户输入的介于5和500之间的有效整数的代码。如果用户输入字符串而不是整数,则程序应使用try-catch方法为用户输出消息。try-catch方法对我不起作用,它输出了一条错误消息。有人能告诉我为什么try-catch方法在我的代码中不起作用吗?

Scanner的nextInt方法的javadoc声明它抛出一个InputMismatchException。不是NumberFormatException。(您与Integer.parseInt混淆了(。

使用Scanner#nextInt()时,应该捕获InputMismatchException而不是NumberFormatException。此外,您第一次使用nextInt()不在try-catch块内。此外,当您稍后捕获异常时,您的代码不再循环。您可以使用dowhile循环和标志(例如valid(来干净地执行此操作。只有当整数可以解析并且在范围内时,才会设置标志。因此,循环将继续,直到用户输入范围内的有效整数为止。下面是一个完整的例子:

Scanner scanner = new Scanner(System.in);
System.out.println("Stage 4: Enter an integer between 5 and 500:");
int intEntry;
boolean valid = false;
do {
try {
intEntry = scanner.nextInt();
if (intEntry > 5 && intEntry < 500) {
valid = true; // set flag to leave loop
} else {
System.out.println("Integer out of range. Try Again. Enter an integer between 5 and 500:");
}
} catch (InputMismatchException e) {
System.out.println("Could not parse integer. Try again. Enter an integer between 5 and 500:");
scanner.next(); // clear invalid token
}
} while (!valid);
System.out.println("You will go to stage 5.");

像这样更新您的代码

System.out.println(" ");
System.out.println("Stage 4: Enter an integer between 5 and 500:");
try{        
IntEntry = keyedInput.nextInt();
if(IntEntry > 5 && IntEntry < 500)
{
System.out.println("You will go to stage 5.");
}
else
{
try
{
while(IntEntry < 5 || IntEntry > 500)
{
System.out.println("Try Again. Enter a string that is between 5 and 15 characters long, and does not contain the letter “z”.");
IntEntry = keyedInput.nextInt();
}
}catch(NumberFormatException e)
{
System.out.println("Try Again. Enter a string that is between 5 and 15 characters long, and does not contain the letter “z”.");
}
}
}catch(NumberFormatException e)
{
System.out.println("Try Again. Enter a string that is between 5 and 15 characters long, and does not contain the letter “z”.");
}    


相关内容

最新更新