我有一个实现Set的类WordCount,但是我在使用WordCount类中从Word类中获取方法的comareTo方法时遇到了麻烦。我正在尝试将Word对象与String对象进行比较,但最后Word也是一个字符串,那为什么它会给我错误呢?
词类
public class Word implements Comparable<String>{
String word;
int count;
public Word(String s)
{
word = s;
count = 1;
}
@Override
public int compareTo(String o) {
return word.compareTo(o);
}
@Override
public String toString()
{
return word + "(" + count + ")";
}
}
使用compareTo方法时,我在这个课程中遇到错误
public class WordCount implements Set<Word>{
private Word[] items;
private int size;
public WordCount()
{
items = new Word[5];
size = 1;
}
@Override
public void add(Word s)
{
int i = 0;
//grow array as needed
if (size >= items.length) {
items = grow(items);
}
while (i < size) {
if (items[i].compareTo(s) > 0) {
break;
}
if (items[i].equals(s)) {
return;
}
i++;
}
items[i] = s;
size++;
}
@Override
public void show()
{
for(Word s : items)
{
System.out.println(s);
}
}
public Word[] grow(Word[] a) {
Word[] newA = new Word[a.length + 5];
System.arraycopy(a, 0, newA, 0, a.length);
return newA;
}
}
答案 0 :(得分:2)
Word类中的compareTo
方法需要一个字符串参数,但是当您在WordCount类中调用它时,您将传递Word
实例。您的Word
类不会扩展String
类,因此您的类型错误不匹配。
答案 1 :(得分:2)
将您的Word类声明为Comparable<Word>.
(正如@Louis Wasserman评论的那样,几乎总是,类可以与自身或超类比较)
然后
@Override
public int compareTo(Word o) {
return word.compareTo(o.word);
}
另外,请考虑完全删除Word,而是使用Map<String, Integer>
,其中键是您正在计算的单词,值是计数。