我一直在学习JAVA,我对代码有一点疑问:
class apple {
public static void main(String[] args) {
int[] num = new int[3];
Scanner input = new Scanner(System.in);
for (int i = 0; i < num.length; i++) {
try {
num[i] = input.nextInt();
} catch (Exception e) {
System.out
.println("Invalid number..assigning default value 20");
num[i] = 20;
}
}
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}
}
我编写了一个小程序来处理异常,如果用户输入不是Int抛出异常并分配默认值。 如果我把扫描器语句放在for循环中,它工作正常,但是如果我把它带到它之外它指定了抛出异常的相同值,即我输入char而不是int。 但是如果我输入所有整数,它会在数组中分配正确的值。
Scanner input = new Scanner(System.in);
我希望你们理解我的问题。
答案 0 :(得分:6)
Scanner#nextInt
如果无法解析整数,则不会超过输入,因此如果您在失败后继续调用它,它将继续尝试再次解析相同的输入,抛出InputMismatchException
您可以在catch
块中调用Scanner#next
,忽略它返回的字符串,以跳过无效输入:
try {
num[i] = input.nextInt();
} catch (Exception e) {
System.out
.println("Invalid number..assigning default value 20");
num[i] = 20;
input.next();
}
答案 1 :(得分:1)
try
{
num[i] = input.nextInt();
}
catch(InputMismatchException ip)
{
System.out.println("Invalid number..assigning default value 20");
num[i] = 20;
input.next();
}
答案 2 :(得分:0)
更好的代码可以是你可以检查下一个值是否为整数,所以你甚至不需要捕获异常:
public static void main(String[] args) {
int[] num = new int[3];
Scanner input = new Scanner(System.in);
for (int i = 0; i < num.length; i++)
{
if(input.hasNextInt())
{
num[i] = input.nextInt();
}
else
{
System..out.println("non integer value.. will assign it default value 20");
num[i]=20;
input.next();
}
}
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}