【发布时间】:2020-09-18 14:13:38
【问题描述】:
即使在我在递增之前检查 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;
}`
我不明白数组在哪里越界
【问题讨论】:
-
请记住,
a[a.length]已经超出范围。有效索引从0到a.length-1。 -
但
j<a.length不意味着它可以拥有的最大索引是a.length-1? -
不,在这种情况下你仍然增加
j,然后可能变成a.length,这将导致下一次外循环迭代出错。 -
很抱歉,我不明白
j在if(j<a.length) j++之后如何增加。您能详细说明一下吗? -
假设
j为a.length-1,则if条件为真,j将增加到a.length。