从两个或多个具有不同长度的数组循环索引数组

时间:2017-10-28 20:33:56

标签: java arrays

Hy,我想创建一个方法,从三个不同的数组中给出一个数组,具有不同的长度索引,如:

[数组中的元素数] [数组的数量]

[0] [0],

[0] [1],

[0] [2],

[1] [0],

[1] [2]

所以我做了这个:

    int a = 0;
    for (int i = 0; i < collections[a].length; i++) {
        for (int k = 0; k < collections.length; k++) {
            result[p] = collections[i][k];
            p++;
        }
    }

    return result;

但它只适用于数组大小相同的时候我不知道应该添加什么条件以避免从第一个数组的第二个元素到第三个数组的第二个元素(不包括第二个元素)时出现“越界”第二个数组的元素,甚至不存在。

int[] array3 = { 10, 20, 30, };
int[] array4 = { 40, 50, };
int[] array5 = { 60, 70, 80, 90 };
A.method(array3, array4, array5);

我想得到的结果是: 10,40,60,20,50,70,30,80,90

1 个答案:

答案 0 :(得分:0)

首先,我发现哪个数组具有最大长度。然后我开始两个循环。 &#34;外部&#34;循环索引j用于访问各个数组&#39;元素,只有在我循环遍历所有单个数组后才会增加。一旦j达到第一步计算的最大长度,我就停止递增j

private static int[] combine(int[]... arrays) {

    int maxArrayLen = Arrays.stream(arrays).mapToInt(array -> array.length).max().getAsInt();

    List<Integer> list = new ArrayList<Integer>();
    for (int j = 0; j < maxArrayLen; j++) {
        for (int i = 0; i < arrays.length; i++) {
            if (arrays[i].length > j) {
                list.add(arrays[i][j]);
            }
        }
    }
    return list.stream().mapToInt(i -> i).toArray();
}

要调用此方法:combine(array3, array4, array5);

正在运行演示:https://ideone.com/F2yxKh