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

Java捕获数组越界异常后如何继续处理后续输入表达式

问题原因

你当前的异常捕获逻辑粒度不对:把整个文件读行循环全包在了外层try块里,catch块中又重复写了一套没有任何异常保护的读行处理逻辑。第一次触发越界异常进入catch块后,只要后续再碰到非法表达式抛出ArrayIndexOutOfBoundsException,外层没有对应的捕获逻辑,程序就会直接崩溃。另外重复写两套完全一致的读行+转换逻辑本身就是冗余实现,很容易引入逻辑漏洞。

修复方案
  • 把异常捕获的粒度缩小到单行表达式处理的层级,不要把整个读文件循环包在try里
  • 删除catch块中重复编写的读行循环逻辑,捕获到当前行的非法异常后,打印提示直接进入下一轮循环即可
  • 推荐使用try-with-resources语法自动管理输入流资源,避免手动关流可能出现的资源泄漏问题

修正后的核心代码如下:

public class Main {
    public static void main(String[] args) {
        // 自动关闭输入流,无需手动维护资源释放
        try (BufferedReader input = new BufferedReader(new FileReader("/Users/khadishaarip/Desktop/requiredinput.txt"))) {
            String prefix_exp;
            // 统一的读行循环,不用重复写遍历逻辑
            while ((prefix_exp = input.readLine()) != null) {
                try {
                    PrefixConverter converter = new PrefixConverter();
                    System.out.println("Postfix : " + converter.preToPost(prefix_exp));
                } catch (ArrayIndexOutOfBoundsException e) {
                    // 仅当前非法行触发提示,不中断整个文件读取流程
                    System.out.println("Too many operators");
                }
            }
        } catch (IOException error) {
            System.out.println("The file does not exist");
        }
    }
}
效果说明

调整后不管是单个非法行还是连续多个非法行,每一行的转换异常都会被单独捕获处理,不会跳出外层的文件读循环,处理完非法行的提示后会自动继续读取下一行内容,完全匹配预期的输出逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:27:33