排序我尝试合并两个排序的数组,但得到的是java。lang.ArrayIndexOutofBounds异常:5无法找出原因
即使我在递增之前检查了j和k的值,它也超出了第一个if语句的界限
`int[] Merge(int[]a,int[]b){
int n=a.length+b.length;
int[] sol= new int[n];
int i=0,j=0,k=0;
while(i<n){
if(a[j]<b[k]){
sol[i]=a[j];
if(j<a.length)j++;
}
else if(b[k]<a[j]){
sol[i]=b[k];
if(k<b.length)k++;
}
i++;
}
return sol;
}`
我不明白数组在哪里越界了
# 1 楼答案
考虑当j=A.thth-1或k= b长度-1时,如果IF条件[^ {};或^ {CD2>} ]通过,使j==a长度变为true或k==b长度为true,while循环在抛出ARARYEXTEXOUTFOUD异常时再次访问该数组。此外,您的代码不处理数组中的公共元素。请检查下面的正确代码
# 2 楼答案
问题在于:
这里,当j=a.length-1时,由于j++,它将变成a.length。 现在,a[j]将超出范围,因为j=a.length。长度总是不允许的。索引从0开始,所以最后一个索引是a.length-1