Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Integer类和compareTo()_Java - Fatal编程技术网

Java Integer类和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[

这段代码在第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);
}
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]之前,它尚未分配值。谢谢。你是对的;简单的错误,我想我醒得太久了。