将两个数组合并在一起并不起作用

时间:2018-02-10 12:59:06

标签: java arrays sorting

int[] mergeArrays(int[] a, int[] b){

    int[] c = new int [a.length+b.length];

    for(int i=0; i > c.length; i++){
        if(a[i] >= b[i]){
            c[i] = a[i];
        }
        else
            c[i] = b[i];
        }
    }

    return c;

}

这是我合并具有不同值并组合相同值的两个数组的方法。输出应该是一个新数组,包含来自两个数组的所有值,并组合所述数组的相同值。

当我在这个方法中传递两个数组并打印出返回的数组时,似乎for循环没有做任何事情,因为值保持为零。是什么原因是新值没有分配给通过for循环的c []数组?

3 个答案:

答案 0 :(得分:2)

你写过我&gt;在for循环中的c.length,它必须是i < c.length

答案 1 :(得分:0)

public static int[] mergeArrays(int[] a, int[] b) {
  List<Integer> temp = new ArrayList<Integer>();
  for (int i = 0; i < a.length; i++) {
    temp.add(a[i]);
  }

  for (int i = 0; i < b.length; i++) {
    if (!temp.contains(b[i])) {
      temp.add(b[i]);
    }
  }
  Collections.sort(temp);
  int[] result = temp.stream().mapToInt(i->i).toArray();
  return result;
}

此代码将为您的目的服务。我们不能通过添加2个数组来构造具有大小的最终数组。因为您关注的是消除重复值。因此,使用值构造List,然后将其转换为int []。

答案 2 :(得分:0)

根据您的评论,您正在组合两个已排序的数组,并希望对结果进行排序。为此,您需要两个计数器(每个输入数组一个)。

int ait = 0;
int bit = 0;
while(true) {
    if(ait < a.length && bit < b.length) {
        if(a[ait] <= b[bit])
            c[ait+bit] = a[ait++];
        else
            c[ait+bit] = b[bit++];
    } else if(ait < a.length) {
        c[ait+bit] = a[ait++];
    } else if(bit < b.length) {
        c[ait+bit] = b[bit++];
    } else {
        break;
    }
}