1

私がやりたいのは、compareTo()メソッドを使用してremovedItemFromList1とremovedItemFromList2を比較し、次に小さい方の値をmodifiedList3に挿入し、2つのremoveedFromList1または2の大きい方を元のリストに戻すことです。引っ張るのに十分な長さの髪があれば、もう抜けていたでしょう...正しくキャストしていませんか?これを実現するためにcompareTo()メソッドを正しく使用するにはどうすればよいですか?

public class List<Integer> implements Comparable 
{
    private ListNode<Integer> firstNode;
    private ListNode<Integer> lastNode;


    public void insertAtBack (Integer insertItem)
    {
        if ( isEmpty())
            firstNode = lastNode = new ListNode<Integer>(insertItem);
        else 
            lastNode = lastNode.nextBasket = new ListNode<Integer>( insertItem );
    }

    public Integer removeFromBack() 
    {   
        Integer removedItem = (Integer) lastNode.topBucketInBasket;

        if ( firstNode == lastNode)
            firstNode = lastNode = null;
        else
        {
            ListNode<Integer> current = firstNode;

            while ( current.nextBasket != lastNode)
                current = current.nextBasket;

            lastNode = current;
            current.nextBasket = null;
        }

        return removedItem;
    }

    public boolean isEmpty()
    {
        return firstNode == null;
    }

    public List<Integer> merge(List<Integer> list1, List<Integer> list2)
    {
        List<Integer> modifiedList3 = new List<Integer>();

         Integer removedItemFromList1 = (Integer) list1.removeFromBack();
         Integer removedItemFromList2 = (Integer) list2.removeFromBack();

          ((Comparable) removedItemFromList1).compareTo( removedItemFromList2);

         int comparison = compareTo(removedItemFromList2);

         if ( comparison == 1)
            modifiedList3.insertAtBack(removedItemFromList2); 
            list1.insertAtBack(removedItemFromList1);

         if ( comparison == -1)
             modifiedList3.insertAtBack(removedItemFromList1);
            list2.insertAtBack(removedItemFromList2);

        return modifiedList3;   
    }
    @Override
    public int compareTo(Integer itemToCompare)
    {
        final int BEFORE = -1;
        final int AFTER = 1;
        if (this.removedItemFromList1 < list2.removedItemFromList2) return BEFORE;
        if (this.removedItemFromList1 > list2.removedItemFromList2) return AFTER;
    }

}
4

2 に答える 2

3

Comparable<Integer>生のバージョンではなく、汎用バージョンを実装する必要がありますComparable

また、以下では

public class List<Integer> implements Comparable

それIntegerはと同じではありませんjava.lang.Integer。実際、それはその文脈ではフォーマルタイプパラメータと呼ばれるものです。

あなたはおそらくそれをに変更したいでしょう

//List is kind of ambiguous with java.util.List
public class MyList<E> implements Comparable<Integer> {

または、の代わりに何か他のものである可能性がありますMyList

実装Comparableする場合は

@Override
public int compareTo(Object itemToCompare) {

そしてComparable<Integer>(あなたが求めているのはこれだと思います)

@Override
public int compareTo(Integer itemToCompare)

違いは、パラメータタイプ-ObjectInteger。です。

それはちょっと厄介で、あなたが何を達成しようとしているのかはっきりしていません。

ただし、Listクラスが実装するポイントは、のインスタンスを別のインスタンスとComparable比較することを示しています。Listその場合は、次のようになります-

public class MyList<E> implements Comparable<MyList> {

    @Override
    public int compareTo(MyList other) {
        //compare and return result
    }

しかし、パラメータタイプがであるという事実は、実際に比較しようとしているのはsであるIntegerことを示唆しています。この場合、はすでにです。IntegerIntegerComparable

((Comparable) removedItemFromList1).compareTo( removedItemFromList2);

あなたはそれをすべてする必要はありません

removedItemFromList1.compareTo(removedItemFromList2);

十分です。そして、それだけが必要な場合は、実装する必要がまったくないので、そのメソッドもComparable削除できます。compareTo

于 2012-10-08T05:30:34.373 に答える
0

比較可能なインターフェースはこのようになります

public interface Comparable<T> {

  public int compareTo(T t){




  }

}

を使用する必要がありますType Parameter比較可能なのはタイプパラメータ化です。

だからこのように試してみてください...

public class mList<Integer> implements Comparable<Integer>{


......



     public int compareTo(Integer itemToCompare){


        .....

    }



}
于 2012-10-08T05:51:28.240 に答える