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

Java代码触发ArrayIndexOutOfBoundsException异常,请求协助排查

解决Java ArrayIndexOutOfBoundsException问题及代码逻辑修正

我来帮你一步步排查这个异常的原因,同时修正代码逻辑来达到你预期的输出:

核心错误分析

你遇到的java.lang.ArrayIndexOutOfBoundsException: 0主要来自这几个问题:

  • 结果数组未初始化有效长度:你定义了int[] r = {};,这是一个长度为0的空数组,根本没有索引0的位置,所以当你尝试r[x] = y时直接触发越界异常。
  • 循环条件错误:数组的索引从0开始,a.length是3,合法索引是0、1、2,但你的循环用了x <= a.length和i <= a.length,这会让循环变量走到3,访问a[3]或b[3]时同样触发越界。
  • 逻辑嵌套混乱:你用了两层循环,这完全没必要——我们只需要一次循环,逐个比较两个数组对应索引的元素即可。
  • 统计逻辑错误:你想用y=1赋值,但这不是统计胜负次数的正确方式,应该分别统计a数组元素大于b的次数、b数组元素大于a的次数。

修正后的代码

下面是修复后的代码,能正确返回你预期的[1,1]结果:

import java.io.IOException;

public class Solution {
    // 比较两个数组,统计a元素大于b的次数和b元素大于a的次数,返回结果数组
    static int[] solve(int a0, int a1, int a2, int b0, int b1, int b2) {
        int[] a = {a0, a1, a2};
        int[] b = {b0, b1, b2};
        // 结果数组长度为2,分别存a赢的次数、b赢的次数
        int[] result = {0, 0};
        
        // 循环遍历每个索引,比较对应元素
        for (int i = 0; i < a.length; i++) {
            if (a[i] > b[i]) {
                result[0]++; // a赢一次,计数加1
            } else if (b[i] > a[i]) {
                result[1]++; // b赢一次,计数加1
            }
            // 相等时不做处理
        }
        
        return result;
    }

    public static void main(String[] args) throws IOException {
        int[] result = solve(5, 6, 7, 3, 6, 10);
        // 打印结果,验证输出[1,1]
        System.out.println("[" + result[0] + ", " + result[1] + "]");
    }
}

运行说明

当你调用solve(5,6,7,3,6,10)时:

  • 索引0:5>3 → a赢,result[0]变为1
  • 索引1:6=6 → 无变化
  • 索引2:7<10 → b赢,result[1]变为1
    最终返回[1,1],完全符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:22:35