给定2个int数组,a和b,返回一个新的数组长度2,其中包含a的元素,后跟b中的元素。阵列可以是任何长度,包括0,但是在2个阵列之间将有2个或更多个元素可用。
make2({4, 5}, {1, 2, 3}) → {4, 5}
make2({4}, {1, 2, 3}) → {4, 1}
make2({}, {1, 2}) → {1, 2}
基本方法是:
public int[] make2(int[] a, int[] b) {
int[] c = new int[]{0,0};
if(a.length<1 && b.length>1)
c = new int[]{b[0],b[1]};
if(a.length ==1 && b.length==1)
c = new int[]{a[0],b[0]};
if(a.length ==1 && b.length>=2)
c = new int[]{a[0],b[0]};
if(a.length >=2 && b.length<2)
c = new int[]{a[0],a[1]};
if((a.length>=2)&&(b.length>=2))
c= new int[]{a[0],a[1]};
return c;
}
演习来自CodingBat.com
答案 0 :(得分:2)
可能不是这个问题的创造者想到了什么,但是到底是什么:
static Integer[] combine( Integer[] a, Integer[]b ){
List<Integer> intList = new ArrayList<>();
intList.addAll( Arrays.asList( a ) );
intList.addAll( Arrays.asList( b ) );
return Arrays.copyOf( intList.toArray( a ), 2 );
}
采用更传统的方法:
static Integer[] combine( Integer[] a, Integer[]b ){
if( a.length >= 2 ){
return Arrays.copyOf( a, 2 );
} else {
if( a.length == 1 ){
return new Integer[]{ a[0], b[0] };
} else {
return Arrays.copyOf( b, 2 );
}
}
}
答案 1 :(得分:1)
使用一些循环!
public static int[] make2(int[]... arrays) {
int[] result = new int[2];
int i = 0;
for (int[] array : arrays) {
for (int value : array) {
result[i++] = value;
if (i > 1)
return result;
}
}
return result;
}
如果你不喜欢varargs参数,你可以这样做:
public static int[] make2(int[] a, int[] b) {
int[][] arrays = new int[][] {a, b};
...
}
答案 2 :(得分:1)
这就是我解决它的方式。总共2个if语句。
public int[] make2(int[] a, int[] b) {
if (a.length == 0) {
return new int[] {b[0], b[1]};
}
if (a.length > 1) {
return new int[] {a[0], a[1]};
}
return new int[] {a[0], b[0]};
}
答案 3 :(得分:0)
首先,您可能最好将此类问题发布到CodeReview。
不要以你做的方式做,不管有多少,因为解决方案对于特定情况非常狭窄(想想现在必须使用3个数字)并且它不会做任何使用Java典型的功能。最好尝试考虑更通用的解决方案并至少使用Java类。
独立于该注释,只需遍历源列表/数组,直到目标中有足够的数据。