【问题标题】:Combining three int arrays into one, Java [duplicate]将三个 int 数组合二为一,Java [重复]
【发布时间】:2016-11-05 21:01:09
【问题描述】:

我正在尝试编写一个合并方法,该方法采用三个数组并将它们移动到一个中。我对 java 很陌生,我提交此代码的网站对于指出我的错误不是很有帮助

static int[] mergeArrays(int[] a1, int[] a2, int[] a3) {

int[] answer = new int[a1.length + a2.length + a3.length];
int i,j,k;
for (i = 0; i < a1.length; i++)
    answer[i] = a1[i];

for (j = 0; j < a2.length; j++)
    answer[i++] = a2[j];

for (k = 0; k < a3.length; k++)
    answer[i++] = a3[k];

return answer;
}

【问题讨论】:

  • 它是否给您任何指示问题是什么?据我所知,这是可行的(前提是您不需要处理空参数,这实际上没有任何意义)。
  • 它没有,但是这会在运行时在一个无法查看/无法访问的主方法中产生近 30 个错误。
  • 那么...你的 main 方法的代码在哪里?
  • 主要方法已经完成了,我看不到它......不是很有用。我将重写它并尝试对数组进行排序,所以我的结果看起来像 {a1[0], a1[1], a1[2] a2[0 ..etc]
  • 你可以指定你提交的平台和你得到的输出。它可能很有用。

标签: java arrays


【解决方案1】:

List&lt;Integer&gt; mergedArray = Arrays.asList(array1); //会给你第一个列表。

mergedArray.addAll(Arrays.asList(array2));
mergedArray.addAll(Arrays.asList(array3));

【讨论】:

  • 这不起作用,因为Arrays.asList() 方法返回一个固定大小的列表。所以.addAll() 方法会抛出异常
  • 你可以看看这个post
【解决方案2】:

我看不出编写一个恰好合并三个数组的方法有什么好处。请考虑这个更灵活的签名:

public static int[] merge(int[]... intArrays);

还应避免低级循环和索引操作,Java 8 可以提供帮助!

public static int[] merge(int[]... intArrays) {
    return Arrays.stream(intArrays)
            .flatMapToInt(i -> Arrays.stream(i))
            .toArray();
}

这非常简洁,没有代码重复,没有低级代码,如果数组很大或很多,甚至可以在并行流中完成。

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2014-01-12
    • 2021-12-17
    • 2020-04-30
    • 2022-08-23
    • 2017-10-12
    • 2015-01-22
    • 1970-01-01
    相关资源
    最近更新 更多