Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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时不可编译的源代码_Java_Comparator - Fatal编程技术网

在Java中使用Comparator时不可编译的源代码

在Java中使用Comparator时不可编译的源代码,java,comparator,Java,Comparator,尝试运行此小程序时出现以下错误: Exception in thread "main" java.lang.ExceptionInInitializerError at MainClass.main(Person.java:120) Caused by: java.lang.RuntimeException: Uncompilable source code - FirstNameComparator is not abstract and does not override abstr

尝试运行此小程序时出现以下错误:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at MainClass.main(Person.java:120)
Caused by: java.lang.RuntimeException: Uncompilable source code - FirstNameComparator is not abstract and does not override abstract method compare(java.lang.Object,java.lang.Object) in java.util.Comparator
    at FirstNameComparator.<clinit>(Person.java:71)
    ... 1 more
Java Result: 1
LastNameComparator.java

class LastNameComparator implements Comparator  {

    public int compareTo(Object person, Object AnotherPerson)  {
        String lastName1 = ((Person)person).getLastName().toUpperCase();
        String firstName1= ((Person)person).getFirstName().toUpperCase();
        String lastName2 = ((Person)person).getLastName().toUpperCase();
        String firstName2 = ((Person)person).getFirstName().toUpperCase();

        if(lastName1.equals(lastName2)) {
            return firstName1.compareTo(firstName2);

        }else {
           return lastName1.compareTo(lastName2);

        }
    }

    }   
class FirstNameComparator implements Comparator {

    public int compareTo(Object person, Object anotherPerson) {

        String lastName1 = ((Person)person).getLastName().toUpperCase();
        String firstName1 = ((Person)person).getFirstName().toUpperCase();
        String lastName2 = ((Person) person).getLastName().toUpperCase();
        String firstName2 = ((Person) person).getFirstName().toUpperCase();

        if(firstName1.equals(lastName1)) {
            return lastName1.compareTo(lastName2); 

        }else {
            return firstName1.compareTo(firstName2);
        }

    }
}
FirstNameComparator.java

class LastNameComparator implements Comparator  {

    public int compareTo(Object person, Object AnotherPerson)  {
        String lastName1 = ((Person)person).getLastName().toUpperCase();
        String firstName1= ((Person)person).getFirstName().toUpperCase();
        String lastName2 = ((Person)person).getLastName().toUpperCase();
        String firstName2 = ((Person)person).getFirstName().toUpperCase();

        if(lastName1.equals(lastName2)) {
            return firstName1.compareTo(firstName2);

        }else {
           return lastName1.compareTo(lastName2);

        }
    }

    }   
class FirstNameComparator implements Comparator {

    public int compareTo(Object person, Object anotherPerson) {

        String lastName1 = ((Person)person).getLastName().toUpperCase();
        String firstName1 = ((Person)person).getFirstName().toUpperCase();
        String lastName2 = ((Person) person).getLastName().toUpperCase();
        String firstName2 = ((Person) person).getFirstName().toUpperCase();

        if(firstName1.equals(lastName1)) {
            return lastName1.compareTo(lastName2); 

        }else {
            return firstName1.compareTo(firstName2);
        }

    }
}
MainClass.java

class MainClass  {

    public static void main(String[] args) {

        Person[] persons = new Person[4];
        persons[0] = new Person();
        persons[0].setFirstName("Asaftei");
        persons[0].setLastName("Ionut");
        persons[0].setAge(25);

        persons[1] = new Person();
        persons[1].setFirstName("Binoclu");
        persons[1].setLastName("Telescop");
        persons[1].setAge(10);

        persons[2] = new Person();
        persons[2].setFirstName("Morcov");
        persons[2].setLastName("Castravete");
        persons[2].setAge(33);

        persons[3] = new Person();
        persons[3].setFirstName("Rosie");
        persons[3].setLastName("Ardei");
        persons[3].setAge(55);

        System.out.println("Natural Order : ");
        for(int counter =0; counter<=3; counter++)  {
            Person person = persons[counter];
            String lastName=person.getLastName();
            String firstName=person.getFirstName();
            int age = person.getAge();
            System.out.println(lastName+ ", " +firstName+ " , "+age);
        }

        Arrays.sort(persons, new FirstNameComparator());
        System.out.println();
        System.out.println("Sorted by First Name: ");
        for(int counter=0; counter<=3; counter++) {
            Person person = persons[counter];
            String lastName = person.getLastName();
            String firstName = person.getFirstName();
            int age = person.getAge();

            System.out.println(lastName+ ", " +firstName+ ", " +age );
        }
        Arrays.sort(persons, new LastNameComparator());
        System.out.println();
        System.out.println("Sorted by Last Name");        for(int counter=0; counter<=3; counter++) {
            Person person = persons[counter];
            String lastName = person.getLastName().toUpperCase();
            String firstName = person.getFirstName().toUpperCase();
            int age = person.getAge();
            System.out.println(lastName +", "+firstName+", "+age);
        }
    }
}
class类main类{
公共静态void main(字符串[]args){
人员[]人员=新人员[4];
人员[0]=新人员();
人员[0]。setFirstName(“Asaftei”);
人员[0]。setLastName(“Ionut”);
人[0],集龄(25);
人员[1]=新人员();
人员[1]。setFirstName(“Binoclu”);
人员[1]。setLastName(“望远镜”);
人[1]。设置(10);
人员[2]=新人员();
人员[2]。setFirstName(“Morcov”);
人员[2]。setLastName(“卡斯特拉维特”);
人[2]。设置(33);
人员[3]=新人员();
人员[3]。setFirstName(“Rosie”);
人员[3]。setLastName(“Ardei”);
人[3]。年龄(55岁);
System.out.println(“自然顺序:”);
对于(int counter=0;counters,需要实现该方法,而不是
compareTo
方法

例如,您的
FirstNameComparator
应该如下所示:

class FirstNameComparator implements Comparator {

    @Override
    public int compare(Object person, Object anotherPerson) {
        // implementation
    }
}
@Override
public int compareTo(Person other) { 
    return Intger.compare(this.getAge(), other.getAge());
}
请注意,由于此
比较器
用于比较
个人
实例,因此最好使用泛型语法并将其定义为:

class FirstNameComparator implements Comparator<Person> {

    @Override
    public int compare(Person person, Person anotherPerson) {
        // implementation
    }
}
类FirstNameComparator实现Comparator{
@凌驾
公共整数比较(个人、个人和其他人){
//实施
}
}
别忘了接受。 因此,使用
实现可比较的
。这意味着您可以比较两个人

此外,不允许重写方法向该方法添加其他抛出。请参阅

新的定义应该是这样的:

class FirstNameComparator implements Comparator {

    @Override
    public int compare(Object person, Object anotherPerson) {
        // implementation
    }
}
@Override
public int compareTo(Person other) { 
    return Intger.compare(this.getAge(), other.getAge());
}

在实现接口时,请确保始终使用注释。如果您意外地重写了错误的方法,则会出现明显的编译错误。Eclipse之类的IDE也可以配置为在您忘记注释时向您发出警告。还要注意,您的比较器从不使用另一个人
——另一个错误Eclipse将向您发出警告u关于。非常感谢。我使用了@Override注释,并将compareTo更改为compare。这解决了我的问题。现在它工作正常,没有错误。非常感谢大家!!!谢谢。这解决了我的问题。现在,将compareTo更改为compare后,一切正常。:)谢谢。在阅读了本页的答案后,一切都清楚了。