在Java中将2个数组合并为1

时间:2016-11-18 14:53:19

标签: java arrays

好的,所以我有以下练习,我需要将2个数组合并为1个数组。

新数组必须包含每个数组的元素,例如:newArray index 0 = 0 index的array1Element,newArray index 1 = index 0的array2Element等等。

如果其中一个阵列没有更多的元素,继续从较长的阵列中放置元素......到目前为止,我已经来到这个......这是不正确的,或者没有给出正确的解决方案......你能不能给我一个合适的解决方案并解释代码中所做的一切......

public static void main(String[] args) {
    int[] array1 = {1,1,1,1,1,1};
    int[] array2 = {2,2,2,2,2,2,2,2,2,2};
    arrayMan(array1,array2);
}

public static int[] arrayMan(int[] firstArray,int[] secondArray) {
    int[] newArray = new int[firstArray.length + secondArray.length];
    int array1Pos;
    int array2Pos;
    System.arraycopy(firstArray,0,newArray,0,firstArray.length);
    for (int i = 0; i < newArray.length -1 ; i++) {
        for (int j = 0; j < secondArray.length ; j++) {
            if(newArray[i] == newArray[i+1]) {
                array1Pos = newArray[i+1];
                array2Pos = secondArray[j];
                    newArray[i] = array1Pos;
                    newArray[i + 1] = array2Pos;
            }
        }
    }
    for (int i = 0; i < newArray.length ; i++) {
        System.out.println(newArray[i]);
    }


    return newArray;
}

预期产出应为{1,2,1,2,1,2,1,2,1,2,1,2,2,2,2}

1 个答案:

答案 0 :(得分:3)

我不会为你写代码,但我会试着指出你正确的方向。

我认为你会发现首先在纸上做这件事很有帮助,在将每个数字添加到目标数组后写出状态。

例如:

Start:
sourceArray1 = [1,1,1,1,1,1]
sourceArray2 = [2,2,2,2,2,2,2,2,2,2]
targetArray = []
targetIndex = 0  <- where to put the next item
source1Index = 0  <- where to get the next item from sourceArray1
source2Index = 0  <- where to get the next item from sourceArray2

Step (take from sourceArray1)
targetArray = [1]
targetIndex = 1
source1Index = 1
source2Index = 0

Step (take from sourceArray2)
targetArray = [1,2]
targetIndex = 2
source1Index = 1
source2Index = 1

Step (take from sourceArray1)
targetArray = [1,2,1]
targetIndex = 3
source1Index = 2
source2Index = 1

在填充targetArray之前继续这样做。在某些时候,您无法增加source1Index,并且必须完全从sourceArray2提取。

一旦您了解了如何在纸上执行此操作,您就会发现代码更容易编写(并且您会发现System.arrayCopy不需要这些代码。