0

うまくいきましたが、プロジェクトを開いてコードを確認すると、正しく動作しません。

これは私のコードです:

  class House implements Comparable<House>
    {

    private String hName;
    private int windowsNumber,
                doorNumber;

    //...


    @Override
    public int compareTo(House obj)
    {

        int nr = ((House)obj).getWindowsNumber();

        return nr - getWindowsNumber();

    }

メイン関数は次のようになります。

 House[] arr = new House[3];

        House tent = new House("House",6,1);
        House  bigTent = new House("The biggest house",10,3);
        House  shouse = new House("Medium house",8,4);



        arr[0]= tent;
        arr[1]= bigTent;
        arr[2]= shouse;

        Arrays.sort(arr);

        int i = 0;
        for(House temp : arr)
            {

            System.out.println("Houses "+ ++i + " :"+temp.getHouseName()+" with windows: "+temp.getWindowsNumber());

            }

次のエラーが表示されます: sortobject.House cannot be cast to java.lang.Comparable。誰かがそれを理解できますか?私はそれの何が悪いのかわからない..

完全なエラー コード:

Exception in thread "main" java.lang.ClassCastException: sortobject.House cannot be cast to java.lang.Comparable
    at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
    at java.util.Arrays.sort(Arrays.java:472)
    at sortobject.SortObject.main(SortObject.java:24)
Java Result: 1

編集2:

新しいプロジェクトを作成し、以前と同じアプローチでコードを書いたところ、うまくいきました。インターフェイス<>に何か問題があったと思います。

4

2 に答える 2

0

メイン メソッドで別のものを参照している可能性がありますHouse(おそらく、実装していないことを除いて同じ構造を持つ別のパッケージのクラスComparable)。これが上記Houseと同じであることを確認してください。House

House[] arr = new House[3];

于 2013-11-01T09:34:52.377 に答える