Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Comparator将大学生的学生ID从最低数字排序到最高数字_Java_Sorting_Comparator - Fatal编程技术网

Java Comparator将大学生的学生ID从最低数字排序到最高数字

Java Comparator将大学生的学生ID从最低数字排序到最高数字,java,sorting,comparator,Java,Sorting,Comparator,这是我的密码,请不要给我作业的答案。有人能告诉我编译错误吗?以及为什么它不起作用。我以前写过这样的代码 简单代码: Student.java public class Student { private int id; public Student(int NewId) { id = NewId; } public int getId(){ return id; } public void setId(int NewId){ i

这是我的密码,请不要给我作业的答案。有人能告诉我编译错误吗?以及为什么它不起作用。我以前写过这样的代码

简单代码:

Student.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();
        }
    }
}
公共类排序
{
公共静态比较程序getStudentComparator()
{

返回新的IdComparator();//您正试图从静态类中访问非静态类

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

static class IdComparator implements Comparator<Student>
同时避免使用
返回o1.getId()-o2.getId();
,因为这可能会导致下溢。使用

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

您已经使
IdComparator
成为一个内部类

或者如果您使用的是
排序的非静态方法,您会说

new IdComparator()
由于该方法是非静态的,因此它将在特定的
排序
对象上操作,
新的
使用与包含新的
IdComparator
的对象相同的对象

但是,由于您在静态方法中调用了它,因此没有
排序对象来包含它。这就是为什么会出现错误

您可能不希望
IdComparator
对象属于特定的
Sort
对象,因为您不需要引用任何
Sort
实例字段。将
static
添加到
IdComparator
的声明中会使其成为嵌套类,而不是内部类

公共类排序{
静态类IdComparator实现Comparator{
...
}
...
}

因为IdComparator类是一个动态的内部类,就像实例的普通字段一样,但main方法是静态的,所以不能使用静态方法直接调用内部类实例。

错误消息是什么?线程“main”中的异常java.lang.Error:未解决的编译问题:无法访问类型Sorter的封闭实例。必须使用类型Sorter的封闭实例(例如x.new A(),其中x是Sorter的实例)来限定分配。位于Sorter.getStudentComparator(Sorter.java:17)位于Tester.main(Tester.java:21)到底什么是静态的,它在这个上下文中做了什么?另外一个是关于下溢的建议(如果ID从来都不是负数,就不会发生这种情况,但是您的建议是良好的实践)
return Integer.compare(o1.getId(), o2.getId());
public class Sort{

    class IdComparator implements Comparator<Student> {
    ...
    }
...
}
x.new IdComparator()
new IdComparator()
public class Sort{

    static class IdComparator implements Comparator<Student> {
    ...
    }
...
}