这是我的代码,请不要给我解决任务的方法。谁能启发我编译错误?以及为什么它不能正常工作。我以前写过这样的代码...

简单的代码:

学生.java

public class Student
{
    private int id;

    public Student(int NewId)
    {
        id = NewId;
    }
    public int getId(){ return id; }
    public void setId(int NewId){ id = NewId; }
}


Sort.java

public class Sort
{
    public static Comparator<Student> getStudentIdComparator()
    {
        return new IdComparator();//<- compile error
    }

    class IdComparator implements Comparator<Student>
    {
        @Override
        public int compare(Student o1, Student o2)
        {
            return o1.getId() - o2.getId();
        }
    }
}


MainFile.java

class MainFile
{
    public static void main(String[] args)
    {
        Student s[] = new Student[10];
        // Here you would just create the instance variable with student id in                 the argument
        Comparator<Student> studentIdComparator = Sort.getStudentIdComparator();

        Arrays.sort(students, studentIdComparator);
     }
}

最佳答案

您正在尝试从静态类中访问非静态类。

只需在比较器类定义之前添加static关键字,例如:

static class IdComparator implements Comparator<Student>


或使用Sort这样的实例:

new Sort().new IdComparator();


还要避免使用return o1.getId() - o2.getId();,因为它可能导致下溢。使用

return Integer.compare(o1.getId(), o2.getId());

关于java - Java比较器将大学生的学生ID从最低编号到最高编号进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29362053/

10-13 03:09