Java交替数组方法编写问题:我的代码哪里出错了?
问题排查与修复方案
先聊聊你代码里的几个核心问题:
- 循环变量未更新:你的
for循环写的是i + 2,这根本不会改变i的值,直接会导致无限循环,得改成i += 2才能让循环正常推进。 - 数组索引逻辑错误:你用
c[i] = a[i]的写法完全不对,比如当i=2时,你会去取a[2],但此时对应的其实应该是a的第二个元素(索引1),正确的索引应该是i/2,因为每两次循环才会推进一次原数组的索引。 - 未处理数组长度不一致的场景:如果两个输入数组一长一短,当前代码要么会触发数组越界异常,要么会丢掉较长数组的剩余元素。
修复后的代码(兼容等长/不等长场景)
public int[] alternate(int[] a, int[] b) { int[] c = new int[a.length + b.length]; int currentIndex = 0; // 先交替填充两个数组共有的长度部分 int minLength = Math.min(a.length, b.length); for (int i = 0; i < minLength; i++) { c[currentIndex++] = a[i]; c[currentIndex++] = b[i]; } // 填充a数组剩下的元素(如果a更长) for (int i = minLength; i < a.length; i++) { c[currentIndex++] = a[i]; } // 填充b数组剩下的元素(如果b更长) for (int i = minLength; i < b.length; i++) { c[currentIndex++] = b[i]; } return c; }
测试验证
针对你给出的示例输入[1,2,3]和[10,20,30],这段代码会按顺序生成[1,10,2,20,3,30],完全符合预期。
如果输入是[1,2]和[10,20,30],结果会是[1,10,2,20,30];如果输入[1,2,3]和[10],结果则为[1,10,2,3],完美适配长度不一致的情况。
内容的提问来源于stack exchange,提问作者Rick Meyers
相关产品推荐
相关产品推荐

