为什么不会编译?我正在尝试按一个int
属性排序学校课程列表:courseLevel
,按升序排列。
我有一个名为UCFCourse
的类,其中包含多个对象courses[]
。我在递增x时为每个对象分配属性值。这是我在main中的代码:
courses[x] = new UCFCourse(courseCode, courseLevel, courseHours, replaceString, eitherCourse);
这是我添加courses[]
的地方。如果我打印出ListOne
,我会得到一个包含我所有课程的大量列表。
List<UCFCourse> ListOne = new ArrayList<UCFCourse>();
for (int i = 0; i < courses.length; i++) {
ListOne.add(courses[i]);
}
//I added all my courses[] to a List
List<UCFCourse> ListOne = new ArrayList<UCFCourse>();
Collections.sort(ListOne, new CourseComparator());
比较者类:
import java.util.Comparator;
public class CourseComparator implements Comparator<UCFCourse> {
public int compare(UCFCourse Course1, UCFCourse Course2) {
return Course1.getCourseLevel() - Course2.getCourseLevel();
}
}
当我最初创建我的对象时,它看起来像这样:
UCFCourse[] courses = new UCFCourse[75];
不确定这个位是否相关,因为我已经将它们全部添加到数组列表中,但我想要彻底。
错误:
Exception in thread "main" java.lang.NullPointerException
答案 0 :(得分:1)
List<UCFCourse> ListOne = new ArrayList<UCFCourse>();
<add your items to list here>
Collections.sort(ListOne, new CourseComparator());
正如此代码所示,您将向比较器发送一个空白列表。如果您确定列表中有项目,请检查传递的Course1和Course2项目是否具有值。您可以通过关闭'getCourseLevel()'并将值返回给调用方法来快速测试。
答案 1 :(得分:1)
您只是在ListOne变量上创建一个新对象,该变量仍为空,这就是您获取NullPointerException的原因。
尝试使用驼峰案例,以便您可以正确识别代码。
答案 2 :(得分:1)
从您提供的代码段我可以告诉您以下内容:
UCFCourse[] courses = new UCFCourse[75];
仅使用 null 对象创建一个完整的数组。通过这个数组并将每个对象添加到ArrayList中将不会实例化它们。
List<UCFCourse> ListOne = new ArrayList<UCFCourse>();
for (int i = 0; i < courses.length; i++) {
ListOne.add(courses[i]);
}
结果是Comparator#compare(UCFCourse c1, UCFCourse c2)
方法参数c1和c2将为null,这会导致NullPointerException。
在将它们添加到ArrayList之前,您需要做的是创建您的UCFCourse对象,例如:
for (int i = 0; i < courses.length; i++) {
courses[i] = new UCFCourse(...);
}