以交替方式合并两个数组

时间:2017-06-16 02:54:16

标签: java arrays

我正在尝试合并到具有相同大小的int类型的数组。这是我的代码

public class classA
{
static int[] mergeArray(int[] arr1, int arr2[])
{
   int arr3[] = new int[arr1.length+ arr2.length];
   int count = 0;
   for(int i = 0; i < arr1.length; i++){
       arr3[count] = arr1[i];
       count++;
       arr3[count] = arr2[i];
    }
    for(int i = 0; i < arr3.length; i++){

        System.out.print(arr3[i]);
    }
   return arr3;
}

public static void main(String[] args) throws IOException
{
    int arr1[] = {1,2,3};
    int arr2[] = {4,5,6};
    int arr3[] = mergeArray(arr1,arr2);
}
}

当我尝试在第一个for循环中打印数字时,它给出了正确输出的1,4,2,5,3,6。但是,当我尝试在第一个for循环外打印它时,它给出了输出1,2,3,6,0,0。有人能帮我吗? TIA

4 个答案:

答案 0 :(得分:3)

for循环中,当您从arr2复制时,您需要增加count

arr3[count] = arr2[i];
count++;

你也可以简化你的代码,

static int[] mergeArray(int[] arr1, int[] arr2) {
    int[] arr3 = new int[arr1.length * 2];
    int count = 0;
    for (int i = 0; i < arr1.length; i++) {
        arr3[count++] = arr1[i];
        arr3[count++] = arr2[i];
    }
    return arr3;
}

print中的main喜欢

int arr3[] = mergeArray(arr1, arr2);
System.out.println(Arrays.toString(arr3));
Java 8+中的

,请使用flatMapIntStream之类的

static int[] mergeArray(int[] arr1, int[] arr2) {
    return IntStream.range(0, arr1.length)
            .flatMap(i -> IntStream.of(arr1[i], arr2[i])).toArray();
}

得到相同的结果。

答案 1 :(得分:2)

根据您的代码,您在添加第二个值后忘记升级计数:

public class classA
{
static int[] mergeArray(int[] arr1, int arr2[])
{
   int arr3[] = new int[arr1.length+ arr2.length];
   int count = 0;
   for(int i = 0; i < arr1.length; i++){
       arr3[count] = arr1[i];
       count++;
       arr3[count] = arr2[i];
       count++; //////////////// here!
    }
    for(int i = 0; i < arr3.length; i++){

        System.out.print(arr3[i]);
    }
   return arr3;
}

public static void main(String[] args) throws IOException
{
    int arr1[] = {1,2,3};
    int arr2[] = {4,5,6};
    int arr3[] = mergeArray(arr1,arr2);
}
}
  

解释

在你的代码中,你只需要在foor循环中执行一次count++;,但是,foor循环从0到arr1.length,等于arr3.length / 2,这意味着你忘记了一半值0,这就是0出现在这里的原因,因为当你启动一个新数组时,int []中的默认值为0。

答案 2 :(得分:2)

改为使用 arr3[count+1] = arr2[i]count += 2

比使用count ++两次容易理解。

static int[] mergeArray(int[] arr1, int arr2[])
{
   int arr3[] = new int[arr1.length+ arr2.length];
   int count = 0;
   for(int i = 0; i < arr1.length; i++){
       arr3[count] = arr1[i];
       arr3[count+1] = arr2[i]; ///////here
       count+=2; ///////and here
    }
    for(int i = 0; i < arr3.length; i++){

        System.out.print(arr3[i]);
    }
   return arr3;
}

答案 3 :(得分:0)

您只需要添加两个值,然后增加第k个值即可。

static int[] array1 = { 1, 2, 3, 4,9 };
static int[] array2 = { 5, 6, 7, 8 };
private static void mergeArrays(int[] arr1, int[] arr2) {
    int[] arr3 = new int[arr1.length + arr2.length];
    int k = 0;
    for (int i = 0,j=0; i < arr1.length && j < arr2.length; i++,j++) {
        arr3[k] = arr1[i];
        arr3[++k] = arr2[j];
        k++;
    }
    
    for (int i = 0; i < arr3.length; i++) {
        System.out.println("arr3: " + arr3[i]);
    }
}