所以我正在构建一个从用户输入中获取内容的程序.我有一个看起来非常简单的try/catch块,如果用户没有输入int,则应该重复该块直到它们为止.这是代码的相关部分:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Except {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
boolean bError = true;
int n1 = 0, n2 = 0, nQuotient = 0;
do {
try {
System.out.println("Enter first num: ");
n1 = input.nextInt();
System.out.println("Enter second num: ");
n2 = input.nextInt();
nQuotient = n1/n2;
bError = false;
}
catch (Exception e) {
System.out.println("Error!");
}
} while (bError);
System.out.printf("%d/%d = %d",n1,n2, nQuotient);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我为第二个整数输入0,那么try/catch就会完全按照预期进行操作并让我再次输入它.但是,如果我有一个InputMismatchException,比如为其中一个数字输入5.5,它只是在无限循环中显示我的错误信息.为什么会发生这种情况,我该怎么办呢?(顺便说一句,我已经尝试显式输入InputMismatchException作为catch的参数,但它没有解决问题.
Ami*_*nde 30
next();当你收到错误时需要打电话.也建议使用hasNextInt()
catch (Exception e) {
System.out.println("Error!");
input.next();// Move to next other wise exception
}
Run Code Online (Sandbox Code Playgroud)
在读取整数值之前,您需要确保扫描仪有一个.而且你不需要那样的异常处理.
Scanner scanner = new Scanner(System.in);
int n1 = 0, n2 = 0;
boolean bError = true;
while (bError) {
if (scanner.hasNextInt())
n1 = scanner.nextInt();
else {
scanner.next();
continue;
}
if (scanner.hasNextInt())
n2 = scanner.nextInt();
else {
scanner.next();
continue;
}
bError = false;
}
System.out.println(n1);
System.out.println(n2);
Run Code Online (Sandbox Code Playgroud)
扫描仪的 Javadoc
当扫描程序抛出InputMismatchException时,扫描程序将不会传递导致异常的标记,因此可以通过其他方法检索或跳过它.
| 归档时间: |
|
| 查看次数: |
92606 次 |
| 最近记录: |