【发布时间】:2026-01-15 23:50:01
【问题描述】:
条件是 输入:arr = [1,0,2,3,0,4,5,0] 输出:[1,0,0,2,3,0,0,4] 说明:调用你的函数后,输入数组修改为:[1,0,0,2,3,0,0,4]
public void duplicateZeros(int[] arr) {
int length = arr.length;
for(int i=0;i<length;i++){
if(arr[i]==0){
arr[i+1]=arr[i];
}
}
}
}
错误是
java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 8
at line 6, Solution.duplicateZeros
at line 54, __DriverSolution__.__helper__
at line 84, __Driver__.main
为什么会出现这个错误?
【问题讨论】:
-
"为什么会出现这个错误?" - 因为最后一个数组索引处的值是
0和if(arr[i]==0),所以您尝试访问arr[i+1]。这超出了数组的范围,因此例外。 -
所以我可以通过增加长度来解决这个错误?
-
不,您不必增加数组的大小(如预期输出所示)。解决方案包括向数组中插入一个元素,同时将后面的值移回,每次都丢失最后一个值。
-
你能帮我实现算法吗,我只是知道,也许只是资源链接)