1

我有一个实现 Set 的类 WordCount,但是我在使用 WordCount 类中的 comareTo 方法时遇到了问题,该类从 Word 类中获取了该方法。我正在尝试将 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;
    }

}
4

2 回答 2

3

将您的 Word 类声明为Comparable<Word>. (正如@Louis Wasserman 评论的那样,几乎总是一个类与其自身或超类可比)

然后

 @Override
    public int compareTo(Word o) {
        return word.compareTo(o.word);
    }

另外,考虑完全摆脱 Word,而使用 a Map<String, Integer>,其中键是您要计数的单词,值是计数。

于 2012-07-11T18:46:10.900 回答
2

compareToWord 类中的方法需要一个字符串参数,但是Word当您在 WordCount 类中调用它时,您正在向它传递一个实例。你的Word类没有扩展String类,所以你有一个不匹配的类型错误。

于 2012-07-11T18:03:26.877 回答