Java中如何循环执行Try-Catch的Try块直到无异常抛出
实现方案
核心思路
要实现循环执行try块直到无异常,只需要做以下几点调整:
- 用
while(true)死循环包裹整个try-catch结构,异常捕获处理完成后会自动回到循环开头,重新执行try块的逻辑 - try块内所有代码执行完毕且未抛出任何异常时,调用
break终止循环即可 - 捕获
InputMismatchException时必须清空Scanner缓冲区的非法输入,避免出现无限读取错误输入的死循环问题
修改后可直接运行的完整代码
import java.util.InputMismatchException; import java.util.Scanner; public class Activity { public static void main(String[] args) { Fraction sampleFraction = new Fraction(8,3); Scanner scan = new Scanner(System.in); // 新增外层死循环 while(true) { try { System.out.print ("请输入分子:"); sampleFraction.setNumerator(scan.nextInt()); System.out.print ("请输入分母:"); sampleFraction.setDenominator(scan.nextInt()); System.out.println ("分数 " + sampleFraction.getNumerator() + "/" + sampleFraction.getDenominator() + " 等于 " + sampleFraction.toMixedNumber()); // 执行到此处说明无任何异常,直接跳出循环 break; } catch (ArithmeticException e) { System.out.println("分母不能为0,请重新输入!\n"); } catch (InputMismatchException e) { System.out.println("请输入有效整数!\n"); // 清空Scanner缓冲区的非法输入,避免死循环 scan.next(); } catch (Exception e) { System.out.println("出现未知异常,请重试!\n"); } } scan.close(); } }
关键改动说明
- 外层新增
while(true)无限循环,只要触发异常,处理完成后都会重新进入输入流程 - try块末尾新增
break语句:只有所有业务逻辑无异常执行完成才会走到该行,直接终止循环 InputMismatchException捕获逻辑中新增scan.next():将用户输入的非整数内容从缓冲区清除,避免下次调用nextInt()时反复读取同一错误内容,导致死循环
内容的提问来源于stack exchange,提问作者StockAZ89
相关产品推荐
相关产品推荐

