Java基础——try-catch语句在while函数中的循环输出问题
问题:
try-catch语句中实现循环输入,即为当输入错误时,捕获异常输出,且可以重新输入。但是出现try结构里的println的无限循环。
原因:
当输入异常时,捕捉到异常Exception,开始下一次的循环,但是此时数据缓冲区依旧留有我上次输入的异常数据,并没有清除这些数据,这时就又开始捕捉异常Exception,还是错误,于是这个异常一直被捕捉一直被输出。出现了无限循环的bug。那么解决的方法就是将捕捉到的异常Exception数据去清除。
解决方案:
方案一:在catch()语句之中加上scanner.next();
方案二:将Scanner的对象scanner写在try语句之中
import java.util.InputMismatchException; import java.util.Scanner; /** * @author FREZXX * @create 2021-05-20 11:42 */ public class FamilyAccount { static int principal = 1000; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); boolean flag = true; int income = 0; int outcome =0; while(flag){ System.out.println("-----------------家庭收支记账软件-----------------"); System.out.println(); System.out.println(" 1.收支明细"); System.out.println(" 2.登记收入"); System.out.println(" 3.登记支出"); System.out.println(" 4.退 出"); System.out.println(); System.out.println(" 请选择(1-4):_"); try { switch (scanner.nextInt()){ case 1: System.out.println("1.收支明细"); System.out.println("现金:" + principal); break; case 2: System.out.println("2.登记收入"); System.out.println("输入您的收入:"); income = scanner.nextInt(); principal += income; break; case 3: System.out.println("3.登记支出"); System.out.println("输入您的支出:"); outcome = scanner.nextInt(); principal -=outcome; break; case 4: System.out.println("4.退 出"); flag = false; break; default: System.out.println("输入不在范围内,请重新输入。"); } }catch (InputMismatchException e){ System.out.println("输入格式错误,请重新输入。"); //当输入异常时,捕捉到异常Exception,开始下一次的循环, // 但是此时数据缓冲区依旧留有我上次输入的异常数据, // 并没有清除这些数据,这时就又开始捕捉异常Exception,还是错误, // 于是这个异常一直被捕捉一直被输出。出现了无限循环的bug。 //解决的方法就是将捕捉到的异常Exception数据去清除。 //方式一 scanner.next(); //方式二 //将scanner定义在try里面 } } } }