我尝试使用返回类型整数对两个数组进行洗牌。例如,我有{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;
}
答案 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;
}
答案 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;
}