[英]Java error: java.lang.NullPointerException
我正在编写代码以从文件中读取一些记录并以特殊方式对其进行排序。 我试过这样的代码:
public class Main {
static class judgement implements Comparable<judgement> {
public int q;
public int d;
public int r;
public int compareTo(judgement j) {
int k = ((judgement) j).q;
return 0;
}
}
public static void method() throws Exception {
judgement[] judgements;
judgements = new judgement[18425];
try {
// fill the "judgements" array
} finally {
Arrays.sort(judgements);
}
}
public static void main(String[] args) throws Exception {
method();
}
}
但是我在功能compareTo中收到错误NullPointerException 。 有人可以帮我解决这个问题吗?
那是因为数组中填充了空指针。 比较器无法将空对象相互比较。
创建数组不会初始化数组的每个元素。
关于compareTo()的实现,请确保数组中仅包含非null元素。 否则,在您的功能compareTo()中,根据假定的现有判断调用“ q”属性会导致NullPointerException。
此外,请避免使用制表符,而最好使用“集合”。 在您的情况下,可以使用TreeSet对象而不是数组,因为它们内部使用元素的compareTo()方法。
您正在使用空值初始化数组。
judgements = new judgement[18425];
并且您没有检查比较中的空值。 您必须使用if语句。
public int compareTo(judgement j) {
int k =0;
if(j!=null){
k = ((judgement) j).q;
}
return 0;
}
可能发生的情况是数组中的某些元素为null
。
好的做法是在compareTo
函数中包括一个空检查。 另外,现在您的compareTo
函数是不起作用的:它始终返回0-就像说所有项目都相等。
您的另一个问题是,您似乎正在try{}finally{}
使用try{}finally{}
,而不应该使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.