package com.zfx.demo1;
import java.util.Scanner;
public class Demo {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int age=0;
while(true){
try{
System.out.println("请输入学生的年龄");
age = sc.nextInt();
break;
}catch (Exception e){
System.out.println("年龄输入有误,请重新输入");
}
}
System.out.println(age);
}
}
我这样输入
为什么它不让我继续输入,一直重复打印这两句
Scanner的2122行
} catch (NumberFormatException nfe) {
position = matcher.start(); // don't skip bad token
throw new InputMismatchException(nfe.getMessage());
}
并没有跳过错误的字符,所以会一直读这个错误的字符。
解决方法1
}catch (Exception e){
sc.next(); //出现异常的时候跳过错误的字符
System.out.println("年龄输入有误,请重新输入");
}
解决方法2
读的时候都按String来读,读完后在转型做判断
try{
System.out.println("请输入学生的年龄");
String str = sc.next();
age = Integer.parseInt(str);
break;
}catch (Exception e){
System.out.println("年龄输入有误,请重新输入");
}
因为你是用int类型接收数据的,所以得输入数字才行,否则就会抛出异常,打印:年龄输入有误,请重新输入
因为你读取的时int呀,然后类型转换报错了,就进入catch了,打印完了,又进入了while(true)的死循环中了