1

Set を実装するクラス WordCount がありますが、Word クラスからメソッドを取得する WordCount クラスで comareTo メソッドを使用するのに問題があります。Word オブジェクトと String オブジェクトを比較しようとしていますが、最終的に Word も String であるため、エラーが発生するのはなぜですか?

単語クラス

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 に答える