此代码在第20行抛出空指针异常,其中调用compareTo()。关于如何让它发挥作用的任何建议?
package exam1review;
import java.util.Random;
public class ArrayTester {
/**
* @param args
*/
public static void main(String[] args) {
int result, max=0;
Integer[] myArray = new Integer[10];
Random rand = new Random();
for (int i = 0; i < 10; i++) {
myArray[i] = rand.nextInt();
System.out.println(myArray[i]);
while (i != myArray.length - 1) {
result = myArray[i].compareTo(myArray[i+1]);
if (result > 0)
max = myArray[i];
else
max = myArray[i+1];
}
}
System.out.println(max);
}
}
答案 0 :(得分:2)
三个问题:
myArray[i+1]
在for
循环的下一次迭代中,这会导致NPE。 (i != myArray.length - 1)
,之后您就可以访问了
myArray[i+1]
,i == myArray.length -
1
已超出范围。while
循环:while (i != myArray.length - 1)
从第一次开始,它似乎永远不会被终止,因为你不会在其中增加i
。答案 1 :(得分:2)
执行
时result = myArray[i].compareTo(myArray[i+1]);
数组元素myArray[i+1]
尚未设置为任何内容。它的值为null。
答案 2 :(得分:1)
您需要使用非空值初始化myArray。
答案 3 :(得分:1)
Integer[]
数组初始化为10 null
个值。您需要将它们设置为实际数字,或者更好 - 请改为使用int[]
。
如果你想保留你的逻辑,你需要两个循环 - 一个用于填充数组,另一个用于寻找最大值。
答案 4 :(得分:1)
问题是您正在循环i
,但您的比较会在设置之前与myArray[i+1]
进行比较。
首先填充数组,然后查找最大值。
像这样:
package cruft;
import java.util.Random;
public class ArrayTester {
/**
* @param args
*/
public static void main(String[] args) {
Integer[] myArray = new Integer[10];
Random rand = new Random();
for (int i = 0; i < myArray.length; i++) {
myArray[i] = rand.nextInt();
}
for (Integer value : myArray) {
System.out.println(value);
}
System.out.println(String.format("max value: %d", findMax(myArray)));
}
public static int findMax(Integer [] values) {
int max = Integer.MIN_VALUE;
if (values != null) {
for (Integer value : values) {
if (value.compareTo(max) >= 1) {
max = value;
}
}
}
return max;
}
}