[英]Getting a Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException error, and am stuck trying to figure out a solution
[英]I'm trying to merge two sorted arrays but getting java.lang.ArrayIndexOutOfBoundsException: 5 can't figure out why
即使在我在递增之前检查 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;
}`
我不明白数组在哪里越界
考虑当 j=a.length-1 或 k=b.length-1 然后你的 if 条件 [ if(j<a.length)j++
; 或if(k<b.length)k++;
] 传递并使 j==a.length 为 true 或 k==b.length 为 true 并且当 while 循环抛出 ArrayIndexOutofBound 异常时再次访问该数组。 此外,您的代码不处理数组中的常见元素。 请检查下面的正确代码
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]){ // equality check handles common case
sol[i++]=a[j++];
if(j==a.length)
break;
}
else if(b[k]<a[j]){
sol[i++]=b[k++];
if(k==b.length)
break ;
}
}
if(j==a.length) {
while (k != b.length)
sol[i++]=b[k++];
}
if(k==b.length) {
while (j != a.length)
sol[i++]=a[j++];
}
return sol;
}
问题在这里:
if(j<a.length)j++;
这里当 j = a.length - 1 时,由于 j++,它将变为 a.length。 现在,a[j] 将超出范围,因为 j = a.length。 a[a.length] 总是超出范围。 索引从 0 开始,所以最后一个索引是 a.length - 1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.