1

与えられた課題で、私はいくつかの極度の困難に直面しています。

割り当ては、4 つの異なるデータ構造、LinkedList、DoublyLinked リスト、deque、および並べ替えられた doublelylinked リストを Java で作成することです。ソートされたメソッドの add メソッドを除いて、ほとんどすべてのものがあります。

私は約 4 時間さまざまなことを試してきましたが、毎回、与えられたテスト ケースが失敗します。

現在のコードを投稿していますが、思い通りに動作しません。誰かがそれを見て、何を修正する必要があるかを知ることができれば、それは素晴らしいことです. コードを他のメソッドや他のものに投稿することもできます。ありがとうございました!

public void add(T item) {
    if (head.getData() == null) {
        head = new Node(item);
        tail = new Node(null);
        tail.setPrev(head);
        head.setNext(tail);
        count++;
    } else if (((Comparable<T>) head.getData()).compareTo(item) >=0) {
        Node tempNode = head;
        head = new Node(item);
        head.setNext(tempNode);
        tempNode.setPrev(head);
        count++;

    } else {
        Node current = head.getNext();
        for (int i = 1; i < size()  && current.getData() != null; i++) {
            if (((Comparable<T>) current.getData()).compareTo(item) > 0) {
                current = current.getNext();
            } else if  (((Comparable<T>) current.getData()).compareTo(item) <= 0) {
                Node newNode = new Node(item);
                current.getPrev().setNext(newNode);
                newNode.setNext(current);
                newNode.setNext(current.getPrev());
                current.setPrev(newNode);
                count++;
                break;
            } 
        }
        tail = new Node(item);
        current.setNext(tail);
        tail.setPrev(current);
        count++;
        return;
    }
}

編集 1:

さて、キャストを修正できますが、それは私が達成しようとしていることを正確には助けません. 私の質問のあいまいさや不明確な部分については申し訳ありません。説明するのは少し難しいです。また、次のような多くのテストケースも提供されました。

 public void testAddAll() {
    SortedDLL<Integer> list = new SortedDLL<Integer>();
    assertEquals(0, list.size());

    Integer[] objects = {32,0,5125,-12};
    Integer[] sorted = {-12,0,32,5125};
    list.addAll(objects);
    assertEquals(4, list.size());

    for (int i = 0; i < objects.length; i++) {
        assertEquals(sorted[i], list.get(i));   
    }
}

私が得た最後のセクションでこれを(assertEqualsの代わりにsystem.out.printlnを使用して)行うと、(-12、-12)(0、0)(32、5125)(5125、0)は完全ではありません右。何が起こっているのかわかりません。ほとんどの解決策を削除したため、試したすべての解決策を投稿することはできません。

4

1 に答える 1

2

あなたのコードは読みにくく、理解しにくいと思います。正確な変数定義などがわかるように、クラス全体を投稿していただければ幸いです。

コードのロジックで見つけたエラーは次のとおりです。

    tail = new Node(item);
    current.setNext(tail);
    tail.setPrev(current);
    count++;
    return;

これは次のように変更する必要があります。

if ( current == tail ) {
    tail = new Node(item);
    current.setNext(tail);
    tail.setPrev(current);
    count++;
    return;
}

編集: 完全なコードが削除されました。

于 2012-11-09T20:38:31.310 に答える