use*_*435 0 java nullpointerexception
我是Java的新手,我正在尝试理解比较器接口.我尝试了以下代码:
package comparator;
import java.io.*;
import java.util.*;
public class comparator {
public static void main(String args[]){
bankAccount[] ba=new bankAccount[500];
ba[0]=new bankAccount(50);
ba[1]=new bankAccount(90);
ba[2]=new bankAccount(20);
Comparator c=new comparing();
System.out.println(c.compare(ba[0], ba[1]));
Arrays.sort(ba, c);
}
}
class bankAccount{
public bankAccount(double bal){
balance=bal;
}
public double balance;
}
class comparing implements Comparator{
public int compare(Object first, Object second){
bankAccount ba1=(bankAccount)first;
bankAccount ba2=(bankAccount)second;
int retval;
if(ba1.balance<ba2.balance){
retval=-1;
}
else if(ba1.balance>ba2.balance){
retval=1;
}
else{
retval=0;
}
return retval;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Exception in thread "main" java.lang.NullPointerException
at comparator.comparing.compare(comparator.java:29)
at java.util.TimSort.binarySort(TimSort.java:265)
at java.util.TimSort.sort(TimSort.java:208)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at comparator.comparator.main(comparator.java:13)
Run Code Online (Sandbox Code Playgroud)
我能知道错误是什么吗?我应该如何使用Arrays.sort()方法.任何帮助将是真诚的感谢.
在你的main方法中,你已经声明了一个500长度的数组但只初始化了3个元素,所以其中有497个null.这会导致比较器出现问题,因为比较器被调用了许多元素对,包括其中的一些元素null.
尝试修改您的main方法以仅声明和初始化3长度数组并再次编译和运行它.也许你的比较器确实存在问题,但至少让我们删除明显的问题并尝试对所有元素进行排序null.