Java Integer类和compareTo()
这段代码在第20行抛出空指针异常,其中调用了compareTo()。关于如何让它工作有什么建议吗Java Integer类和compareTo(),java,Java,这段代码在第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[
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);
}
package-exam1审查;
导入java.util.Random;
公共类ArrayTester{
/**
*@param args
*/
公共静态void main(字符串[]args){
int结果,max=0;
整数[]myArray=新整数[10];
Random rand=新的Random();
对于(int i=0;i<10;i++){
myArray[i]=rand.nextInt();
System.out.println(myArray[i]);
while(i!=myArray.length-1){
结果=myArray[i]。比较(myArray[i+1]);
如果(结果>0)
max=myArray[i];
其他的
max=myArray[i+1];
}
}
系统输出打印项次(最大值);
}
}您需要使用非空值初始化myArray。使用10个
空值初始化整数[]
数组。您需要将它们设置为实际数字,或者更好-使用int[]
如果要保留逻辑,需要两个循环—一个用于填充数组,另一个用于查找最大值。问题是,您在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;
}
}
包装破损;
导入java.util.Random;
公共类ArrayTester{
/**
*@param args
*/
公共静态void main(字符串[]args){
整数[]myArray=新整数[10];
Random rand=新的Random();
for(int i=0;i=1){
最大值=最大值;
}
}
}
返回最大值;
}
}
三个问题:
您正在尝试访问myArray[i+1]
,而只对其进行初始化
在你的for
循环的下一次迭代中,这将使你成为NPE。
您的条件是(i!=myArray.length-1)
,稍后您可以访问
myArray[i+1]
,它超出了i==myArray.length的范围-
1
while
循环:while(i!=myArray.length-1)
从第一个galnce开始,它似乎永远不会终止,因为您不会在其中增加i
在你执行的地方
result = myArray[i].compareTo(myArray[i+1]);
数组元素myArray[i+1]
尚未设置为任何值。它的值为空。是否有理由使用Integer
而不是int
?而且,i
在while循环中从不更改,因此它必然是无限的。为什么这样找到最大值?对于这样一个简单的任务来说,它太复杂了……在我看来,while循环是无用的,它已经包含在for loop中了。代码中有一些非常基本的错误。for和while循环中使用相同的变量。while循环不会增加/减少计数器变量,即使没有错误,计数器变量也会导致无限循环。空指针异常的原因是访问尚未初始化的数组索引。您正在访问myArray[i+1]之前,它尚未分配值。谢谢。你是对的;简单的错误,我想我醒得太久了。