Java两个int数组同位置元素求和代码错误排查
代码错误排查
核心问题
- 数组下标越界:你在循环中使用长数组的长度作为边界,当i超过短数组的最大下标后,依然读取短数组的对应索引元素,会直接抛出
ArrayIndexOutOfBoundsException异常。以你给出的测试用例为例,arrayA长度为5,当循环到i=5时访问arrayA[5]就会触发报错。 - for循环初始化逻辑错误:你把for循环的初始化语句写成了
arrayB[i] = 0/arrayA[i] = 0,这里本该对循环变量i做初始化,你反而直接把长数组首个下标的原始值覆盖为0,丢失了原有数据。
修复思路
循环仅执行到短数组的长度即可,短数组没有对应索引的长数组部分不需要修改,保留原值就符合题目要求。
修复后代码
public class TwoArrays { public static void main(String[] args) { int[] arrayA = {1, 5, 2, 6, 8}; int[] arrayB = {4, 5, 7, 10, 7, 9, 7}; int lengthA = arrayA.length; int lengthB = arrayB.length; // 取短数组长度作为相加循环的边界 int minLength = Math.min(lengthA, lengthB); if (lengthA < lengthB) { // 以更长的arrayB为结果载体 for (int i = 0; i < minLength; i++) { arrayB[i] = arrayA[i] + arrayB[i]; } // 输出结果 for (int num : arrayB) { System.out.println(num); } } else { // 长度相等或者arrayA更长时,以arrayA为结果载体 for (int i = 0; i < minLength; i++) { arrayA[i] = arrayA[i] + arrayB[i]; } // 输出结果 for (int num : arrayA) { System.out.println(num); } } } }
测试用例运行结果
你给出的测试用例中arrayB更长,相加后arrayB的最终值为[5, 10, 9, 16, 15, 9, 7],对应输出就是上述数值。
内容的提问来源于stack exchange,提问作者sylvtronix
相关产品推荐
相关产品推荐

