交错两个数组

时间:2014-09-08 22:04:13

标签: java arrays

我尝试使用返回类型整数对两个数组进行洗牌。例如,我有{1,2,3}和{0,5}。我得到的结果是{1,0}。所以,我不确定如何打印数组中的其余数字。

这就是我所拥有的:

public int[] shuffle(int[] A, int[] B) {
    int shuff = 0;
    int[] out = { A[shuff], B[shuff] };

    for (int i = 0; i < A.length; i++) {
        for (int j = 0; j < B.length; j++) {
            int shuffle = A[i];
            A[i] = B[j];
            B[j] = shuffle;
        }
    }
    return out;
}

2 个答案:

答案 0 :(得分:3)

使用:

int[] out = { A[shuff], B[shuff] };

你只是在第一个数字A和第一个数字B,你的循环根本不重要。然后你退出,所以它总会返回{1,0}

如果您希望结果为:{1, 0, 2, 5, 3}我会这样写:

public static int[] interleave(int[] a, int[] b) {
    int[] out = new int[a.length + b.length];
    int j = 0;
    int maxLength = Math.max(a.length, b.length);
    for (int i = 0; i < maxLength; i++) {
        if (i < a.length) {
            out[j++] = a[i];
        }
        if (i < b.length) {
            out[j++] = b[i];
        }
    }
    return out;
}

运行代码段: http://rextester.com/ISTE29382

答案 1 :(得分:0)

这是一个更通用的解决方案:

public static void main(String... args) throws IOException {
     Integer []a={1, 2, 3},b= {0, 5};
     System.out.println(interweave(Arrays.asList(a),Arrays.asList(b)));
}
public static <t> List<t> interweave(List<t> ... lists) {
    int max=0,sum=0;
    for(List<t> l:lists){
        assert l!=null;
        if(l.size()>max){
            max=l.size();
        }
        sum+=l.size();
    }
    List<t> ret=new ArrayList<>(sum);
    for(int i=0;i<max;i++){
        for(List<t> l:lists){
            if(i<l.size()){
                ret.add(l.get(i));
            }
        }
    }
    return ret;
}