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
相关产品推荐
相关产品推荐

