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

如何修复Java应用题求解算法中的ArrayIndexOutOfBoundsException错误

问题修复:Java数学应用题算法数组越界错误

错误原因分析

抛出的ArrayIndexOutOfBoundsException核心原因是你硬编码访问了数组不存在的索引。以输入句子"if ben has 3 apples and bee has 4 apples how many apples do they have all together"为例:

  • 用"and"拆分后得到的数组parsedLine[0]长度仅为2,但你在num1数组里尝试访问parsedLine[0][2]和parsedLine[0][3],这两个索引根本不存在,直接触发越界错误。
  • 同时用逗号、句号、"more"拆分原句时,得到的数组长度可能只有1,后续访问索引1及以上也会报错。

本质问题是错误假设所有拆分后的数组都有4个元素,且拆分逻辑混乱,完全没必要同时用多个分隔符拆分后硬编码取数。

修复方案

换一种更可靠的思路:先判断加法场景,再直接从整个句子中提取所有数字,最后求和。具体调整如下:

  1. 简化加法场景判断逻辑,用数组存储关键词,更易维护。
  2. 用正则表达式匹配句子中所有数字,无需拆分字符串,彻底避免数组越界。
  3. 移除不必要的抽象类、未使用的变量,规范代码命名。

修复后的代码

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MathProblemSolver {
    static Scanner scanner = new Scanner(System.in);

    public static void solveAdditionProblem() {
        String question = scanner.nextLine();

        // 加法场景关键词集合
        String[] addKeywords = {"together", "sum", "more", "plus", "altogether"};
        boolean isAddition = false;
        for (String keyword : addKeywords) {
            if (question.contains(keyword)) {
                isAddition = true;
                break;
            }
        }

        if (isAddition) {
            // 正则匹配所有数字
            Pattern pattern = Pattern.compile("\\d+");
            Matcher matcher = pattern.matcher(question);

            int total = 0;
            while (matcher.find()) {
                total += Integer.parseInt(matcher.group());
            }

            System.out.println("Total apples: " + total);
        } else {
            System.out.println("Not an addition problem.");
        }
    }

    public static void main(String[] args) {
        System.out.println("Enter your math problem:");
        solveAdditionProblem();
        // 若要用预设问题,替换上面两行:
        // String presetQuestion = "if ben has 3 apples and bee has 4 apples how many apples do they have all together?";
        // question = presetQuestion;
        // solveAdditionProblem();
    }
}

代码说明

  • 加法判断:遍历关键词数组,只要句子包含任意一个关键词就判定为加法场景。
  • 数字提取:用\\d+正则匹配所有连续数字,彻底规避拆分字符串带来的数组越界风险。
  • 求和逻辑:遍历所有匹配到的数字,累加得到最终结果。
  • 代码规范:移除了未使用的IO类、抽象类,类名改为符合Java规范的MathProblemSolver,变量名更清晰易懂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:18:23