0

remove メソッドを呼び出した後、display を呼び出すと、空のリストが表示されます。ただし、最初に表示メソッドを呼び出すと、正しいリストが表示されます。「最初の」値がリストの最後に達したか、どこかでノードが壊れていると推測しています。どんな助けでも大歓迎

public class LinkedList {

    private Node first;

    public LinkedList()
    {
        first = null;
    }

    //add students to the list
    public void add(Student s)
    {
        Node newNode = new Node(s);
        newNode.next = first;
        first = newNode;        
    }

    //remove duplicate records (return true if duplicate found)
    public boolean remove(String fn, String ln)
    {
        Student remove;
        boolean found = false;
        int duplicate = 0;
        while(first != null)
        {
            if(first.value.getFname().equals(fn) && first.value.getLname().equals(ln))
            {
                duplicate++;
                if(duplicate > 1)
                {
                    remove = first.value;
                    found = true;  

                }                
            }
            first = first.next;
        }
        if(found)
            return found;
        else
            return found;
    }

    //display list of student
    public void display()
    {
        if(first == null)
            System.out.println("List is empty!");
        else
        {
            while(first != null)
            {
                System.out.println(first.value);
                first = first.next;
            }            
        }            
    }

}

主要

public class Tester {


    public static void main(String[] args) {

        UnderGrad john = new UnderGrad("john", "doe", 2.7, "computer Science", "phisics");
        UnderGrad jorge = new UnderGrad("jorge", "vazquez", 3.8, "computer Science", "programming");
        UnderGrad john2 = new UnderGrad("john", "doe", 3.0, "Computer Engineering", "phisics");

        Advisor jim = new Advisor("jim", "smith");

        Grad jane = new Grad("jane", "doe", 3.0, "Electric Engineering", jim);       


        LinkedList students = new LinkedList();

        students.add(john);
        students.add(jorge);
        students.add(john2);
        students.add(jane);


        System.out.println(students.remove("john", "doe"));

        students.display();


    }
}

出力

run:
true
List is empty!
BUILD SUCCESSFUL (total time: 1 second)
4

4 に答える 4

3

リンクされたリストのヘッド ( ) をメソッドfirstの反復子として使用しています。remove代わりに、ローカル変数を使用します。

for (Node current = first; current != null; current = current.next) {
    if (current.value.getFname().equals(...
    ...
    ...
}
于 2012-06-09T23:56:59.410 に答える
1

いくつかのバグがあります。これを意味することはおそらくありません: if(found) return found; そうでなければ戻ります。

それは常にtrueを返します。

ブレークポイントを設定し、データ構造の図を描き (はい鉛筆で)、コードを実行しながらデバッガーでデータ構造を観察します。

ここでコードアンサーを出されてしまうと、次の課題も分からなくなってしまいます。ごめん。

――アーチボルド教授。

于 2012-06-09T23:57:21.123 に答える
1

firstコードをステップ実行して、 の最初の呼び出し後にの値がどうなるかに注意してくださいremove(...)

ヒント: になりますnull

からその内容へLinkedList.firstの唯一の参照であるLinkedListため、呼び出しremove()た後、リストは内容を「忘れて」います。

于 2012-06-10T00:06:09.283 に答える
0

問題は add( ) メソッドにあります。そこを見てください。:)

于 2012-06-09T23:54:44.400 に答える