有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

排序如何修复错误:“AlphaSorter必须实现继承的抽象方法java.lang.Comparable<AlphaSorter>.compareTo(AlphaSorter)?

我一直在问一些关于创建排序方法的问题,这些方法可以对从文本文件读取的联系人姓名的链接列表进行排序,并且比我之前的问题有所改进:(What is a better method to sort strings alphabetically in a linked list that is reading in lines from a text file?),但是在创建一个名为AlphaSorter的单独类后,我现在遇到了两个错误。java中的compareTo()方法,该方法用于重写名为ContactList的链表程序/类中的sort()方法。爪哇

我收到两个错误:

  1. AlphaSorter必须实现继承的抽象方法java。朗,可比。比较(字母分拣机)

  2. AlphaSorter类型的方法compareTo(ContactNode,ContactNode)必须覆盖或实现超类型方法

这是链表程序:ContactList。爪哇

public class ContactList{

private ContactNode head;
private ContactNode last;
public ContactNode current;

public ContactList(){
head = null;
last = null;
current = null;}

public void addNode(ContactNode input){
if(this.head == null)
{this.head = input;
this.last = input;}
else
last.setNext(input);
input.setPrev(last);
this.last = input;}

public void traverse(){
System.out.println();
current = this.head;
while (current != null){
System.out.print(current.getName() + " ");
System.out.println("");
current = current.getNext();}
System.out.println();}

@Override
public String toString(){
ContactNode current = head;
while(current!=null){
System.out.print(current.getName() + "\n");
current = current.getNext();}
return null;}

public void insertNewFirstNode(String current){
ContactNode newNode = new ContactNode(current);
head = newNode;
if(last == null){
last = head;}}

public void sort(){
ContactList sorted = new ContactList();
ContactNode current = head
while (current != null){
if((current.getName() != null)){
current.getName().compareTo(current.getName());
sorted.insertNewFirstNode(current.getName());}
else if((current != null)){current = current.getNext();}
System.out.println(toString() + sorted);
System.out.println("");
System.out.println("");
break;}}}

这是节点类:ContactNode。爪哇

public class ContactNode{
public String name;
public int index;
private ContactNode prev;
public ContactNode next;

ContactNode(String a){
this.name = a;
index = 0;
next = null;
prev = null;}

ContactNode(){}

public ContactNode getNext()
{return next;}
public ContactNode getPrev()
{return prev;}
public String getName()
{return name;}
public int getIndex(){
return index;}


public  void setNext(ContactNode newnext)
{next = newnext;}

public  void setPrev(ContactNode newprevious)
{prev = newprevious;}
public void setName(String a)
{name=a;}
public void setIndex(int b)
{index=b;}}

这是主要方法:ContactMain。爪哇

import java.util.Scanner;
import java.io.FileReader;
import java.io.FileNotFoundException;

public class ContactMain{

public static void main(String[]args){
try{
FileReader filepath = new FileReader("data1.txt");
Scanner k = new Scanner(filepath);
ContactList myList = new ContactList();
while (k.hasNextLine()){
String i = k.nextLine();
myList.addNode(new ContactNode(i));}

myList.traverse();
System.out.println("");
myList.sort();

}catch (FileNotFoundException e){
System.out.println("File Not Found. ");}}}

最后是排序类:AlphaSorter。爪哇

import java.util.Comparator;
import java.io.Serializable;

class AlphaSorter implements Comparable<AlphaSorter>{
@Override
public int compareTo(ContactNode e1, ContactNode e2) {
return e1.getName().compareTo(e2.getName());}

public boolean equals(Object obj){
return this==obj;}}

我不确定CompareTo()方法如何与导入包一起工作。有人能解释一下吗?谢谢大家!


共 (2) 个答案

  1. # 1 楼答案

    Comparable接口适用于那些可以比较自己类实例的“自然顺序”的类

    但是,您正试图为此创建一个单独的类。看起来您正在尝试实现Comparator,因为您有一个compareTo方法来比较不同类ContactNode的对象

    改为实现Comparator<ContactNode>

    class AlphaSorter implements Comparator<ContactNode>{
    

    此外,在^{}, the method is ^{}中,不是compareTo

    @Override
    public int compare(ContactNode e1, ContactNode e2) {
    
  2. # 2 楼答案

    您需要正确地实现compareTo方法:

    @Override
    public int compareTo(ContactNode other) {
        return getName().compareTo(other.getName());
    }
    

    不要混淆Comparable(它有一个单参数compareTo方法,用于将当前对象与另一个对象进行比较)和Comparator(它有一个双参数compare方法,用于比较两个其他对象)