You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

关键改动说明

  1. 外层新增while(true)无限循环,只要触发异常,处理完成后都会重新进入输入流程
  2. try块末尾新增break语句:只有所有业务逻辑无异常执行完成才会走到该行,直接终止循环
  3. InputMismatchException捕获逻辑中新增scan.next():将用户输入的非整数内容从缓冲区清除,避免下次调用nextInt()时反复读取同一错误内容,导致死循环

内容的提问来源于stack exchange,提问作者StockAZ89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:51:01