2015-01-12 27 views
0

我一直在问关于创建一个排序方法来排序从一个文本文件,并已从我以前的问题:(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.java如何解决此错误:“AlphaSorter必须实现继承的抽象方法java.lang.Comparable <AlphaSorter> .compareTo(AlphaSorter)?

我收到两个错误:

  1. AlphaSorter必须实现继承抽象方法java.lang.Comparable.compareTo(AlphaSorter)

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

这是链表程序:ContactList.java

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.java

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.java

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.java

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()方法是如何准确地与工作导入包。有人可以解释吗?谢谢!

回答

0

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

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

改为执行Comparator<ContactNode>

class AlphaSorter implements Comparator<ContactNode>{ 

此外,在Comparator, the method is compare,不compareTo

@Override 
public int compare(ContactNode e1, ContactNode e2) { 
+0

很好。这解决了我的错误,但我的输出仍然是我的原始列表的副本。如何按字母顺序执行? –

0

您需要正确实施compareTo方法:

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

不要混淆Comparable(其中有一个参数compareTo方法,其当前对象与其他对象进行比较)与Comparator(其中有两-argument compare方法,并比较两个其他对象)。

+0

太棒了。谢谢你,先生。 –

相关问题