Java异常问题(我才学到异常,有点不懂)


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);
    }
}

我这样输入

img
为什么它不让我继续输入,一直重复打印这两句

img

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)的死循环中了