在Java中合并两个数组

时间:2014-12-02 14:05:54

标签: java arrays

写一个方法

public static ArrayList merge(ArrayList a, ArrayList b)

合并两个数组列表,交替使用两个数组列表中的元素。如果一个数组列表比另一个更短,则只要可以替换,然后追加较长数组列表中的其余元素。例如,如果a是

     1 4 9 16

b

      9 7 4 9 11

然后merge返回数组列表

      1 9 4 7 9 4 16 9 11

我尝试做的是使用if语句编写for循环,以便当i是偶数(i%2 == 0)时从数组列表a向数组列表添加数字,从数组列表b开始我是一个奇数。然而,我不知道如何处理一个数组列表可能比另一个更长的事实。有人可以帮帮我吗?这是我目前的代码

package test;

import java.util.Scanner;

public class Arraybig {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int m = scan.nextInt();
        int n = scan.nextInt();
        int[] A = new int[m];

        for (int k = 0; k < m; k++) {
            A[k] = scan.nextInt();
        }

        int[] B = new int[n];

        for (int k = 0; k < n; k++) {
            B[k] = scan.nextInt();
        }

        int[] C = new int[m + n];
        int max = Math.max(m, n);
        int a = 0, b = 0;

        for (int i = 0; i < m+n; i++) {
            if (i % 2 == 0 && a < A.length) {
                C[i] = A[a];
                a++;
            } else if (i % 2 != 0 && b < B.length) {
                C[i] = B[b];
                b++;
            } else if (a < A.length) {
                C[i] = A[a];
                a++;
            } else {
                C[i] = B[b];
                b++;
            }
        }

        for (int j = 0; j < C.length; j++) {
            System.out.println(C[j] + " ");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

更清洁的方法可能是这样的......

list<Integer> a1=//1st list
list<Integer> a2=//2nd list
list<Integer> a3=new Arraylist<Integer>();


int length=(a1.size()<=a2.size())?a1.size():a2.size();

for(int i=0;i<length;i++){
        a3.add(a1.get(i));
        a3.add(a2.get(i));
}
for(int i=length;i<a1.size();i++){
    a3.add(a1.get(i));
}
for(int i=length;i<a2.size();i++){
    a3.add(a2.get(i));
}

答案 1 :(得分:0)

提示:要填充的数组有多长?您的主for循环运行了多少次迭代?为什么它不是同一个数字?