为什么我的Java程序合并2个整数数组只在某一点上给出正确的输出



我有这两个数组:

数组A[-5,-4,-3,-2,-1,6,7,8,9,10,11]阵列B[-33,-22,-11,44,55,66,77,88]

如您所见,数组A和数组B都已排序。我必须将它们合并到第三个数组(arrayC)中,该数组应该进行排序。(不过我不能使用任何数组排序功能)

这是我的while循环:

 int[] c = new int[a.length + b.length];
   int aCount = 0;
   int bCount = 0;
   int cIndex = 0;
   while (aCount < a.length && bCount < b.length) {
      if (a[aCount] < b[bCount]) {
         c[cIndex] = a[aCount];
         cIndex++;
         aCount++;
      }
      else {
         c[cIndex] = b[bCount];
         cIndex++;
         bCount++;
      }
   }

这是我的输出:

[-33,-22,-11,-5,-4,-3,-2,-1,6,7,8,9,10,11,0,0,0]

它一直正常工作,直到达到11,但在那之后,当它应该是44、55、66、77、88时,它只显示0。

我错过了什么?

您只将两个数组合并到到达数组a末尾的点。然后while循环中断。您必须插入另一个数组的剩余值。

int[] tmp = (aCount == a.length ? b : a);
int ct = (aCount == a.length ? bCount : aCount);
for(; ct < tmp.length ; ct++)
     c[cIndex++] = temp[ct];

ab中选择每个元素后,递增相应的索引。当你到达a的最后一个元素(即a[10])时,你再次增加索引,现在aCount不再小于a.length。所以你跳过了整个剩下的过程。

在设置值之前,零是c的默认值。由于您没有设置这些值,因此它们保持为0。

只要一个索引到达数组末尾,循环条件(aCount < a.length && bCount < b.length)就变为false。由于只增加循环中的一个索引,这意味着另一个数组中至少有一个元素需要插入到c

您也可以添加以下代码来添加缺失的元素:

// add elements missing from first array
while (aCount < a.length) {
     c[cIndex] = a[aCount];
     cIndex++;
     aCount++;
}
// add elements missing from second array
while (bCount < b.length) {
     c[cIndex] = b[bCount];
     cIndex++;
     bCount++;
}

相关内容

最新更新