gpt4 book ai didi

java - 在 Java 中使用 Comparator 时无法编译的源代码

转载 作者:行者123 更新时间:2023-11-29 05:02:46 25 4
gpt4 key购买 nike

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

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

请告诉我我哪里做错了,当然这对解释如何正确使用 ComparatorComparable 有帮助。

import java.util.*;
import java.lang.*;

public class Person implements Comparable {

private String firstName;
private String lastName;
private int age;

public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}

public void setLastName(String lastName) {
this.lastName= lastName;
}

public String getLastName() {
return lastName;
}

public void setAge(int age) {
this.age=age;
}
public int getAge() {
return age;
}

@Override
public int compareTo(Object anotherPerson) throws ClassCastException {
if(!(anotherPerson instanceof Person)) {
throw new ClassCastException("A person object expected !");
}
int anotherPersonAge = ((Person)anotherPerson).getAge();
return this.age = anotherPersonAge;
}

}

姓氏比较器.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);

}
}

}

名字比较器.java

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);
}

}
}

主类.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);
}
}
}

最佳答案

Comparator我们需要实现 compare方法,而不是 compareTo 方法。

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

class FirstNameComparator implements Comparator {

@Override
public int compare(Object person, Object anotherPerson) {
// implementation
}
}

请注意,由于此 Comparator 用于比较 Person 实例,因此使用泛型语法并将其定义为更好的做法:

class FirstNameComparator implements Comparator<Person> {

@Override
public int compare(Person person, Person anotherPerson) {
// implementation
}
}

关于java - 在 Java 中使用 Comparator 时无法编译的源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31495724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com