我写了这段代码,但我不明白为什么我不能检查数组中的null。
public static int[] maxArr(int[] a, int[] b) {
int[] newArray = new int[Math.max(a.length, b.length)];
int min = Math.min(a.length, b.length);
for (int i = 0; i < min; i++) {
if (a[i] >= b[i]) {
newArray[i]=a[i];
} else {
newArray[i]=b[i];
}
}
for (int j = min; j < newArray.length; j++) {
if (b[min] == null) {
newArray[j] = a[j];
}
else {
newArray[j] = b[j];
}
}
return newArray;
}
这是错误:
error: bad operand types for binary operator '=='
if (b[min] == null) {
^
first type: int
second type: <null>
1 error
我是编程新手,所以在此先谢谢
答案 0 :(得分:2)
您具有原始类型int
的数组。并且基元永远不会具有null
值。默认情况下,int
变量将分配0
值。您可能需要切换到包装类Integer
才能使用null
检查未初始化的值。
答案 1 :(得分:0)
就像我说过的,您不能将原始整数与null进行比较,您可以采用另一种方法来实现相同的结果。
您的第一个循环很好,如果要从较大的数组中复制剩余的整数,可以使用System.arraycopy方法。您可以将您的方法修改为这样,
public static int[] maxArr(int[] a, int[] b) {
int[] newArray = new int[Math.max(a.length, b.length)];
int min = Math.min(a.length, b.length);
for (int i = 0; i < min; i++) {
if (a[i] >= b[i]) {
newArray[i] = a[i];
} else {
newArray[i] = b[i];
}
}
if (a.length > b.length) {
System.arraycopy(a, min, newArray, min, a.length - min);
} else {
System.arraycopy(b, min, newArray, min, b.length - min);
}
return newArray;
}
这也为您提供了与第二遍for循环一样的效果。
尝试使用以下代码对其进行测试,
public static void main(String args[]) throws Exception {
int[] a = new int[] { 2, 7, 2, 8 };
int[] b = new int[] { 4, 6, 3, 9, 5, 8, 7};
int[] max = maxArr(a, b);
System.out.println(Arrays.stream(max).boxed().collect(Collectors.toList()));
}
这将根据需要打印以下输出
[4, 7, 3, 9, 5, 8, 7]