修复我的排序错误

时间:2017-01-04 22:46:27

标签: java sorting

为什么不会编译?我正在尝试按一个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

3 个答案:

答案 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(...);
        }