0

Node と LinkedList という 2 つのクラスを作成しました。コードはコンパイル可能ですが、リンク リストに保存する最後のデータを生成することはありません。

これら2つのクラスを検討してください

Node.java

public class Node {

private int id;
private String name;
private Node next;

public Node(int id, String name) {
    this.id = id;
    this.name = name;
}

public int getID() {
    return id;
}

public String getName() {
    return name;
}

public void setID(int id) {
    this.id = id;
}

public void setName(String name) {
    this.name = name;
}

public Node getNext() {
    return next;
}

public void setNext(Node next) {
    this.next = next;
}

public Node(int id, String name, Node next) {
    this.id = id;
    this.name = name;
    this.next = next;
}

}

LinkedList.java

public class LinkedList {

private Node start;

public LinkedList() {
    start = null;
}

public static void main(String[] args) {
    LinkedList list = new LinkedList();

    list.create(2345,"Peter");
    list.create(3001,"Mary");
    list.create(4763,"John");
    list.create(3863,"Johnny");

    list.display();
}

public void create(int id, String name) {
    if(start == null) {
    start = new Node(id, name, start);
    } 
    else {  
        Node temp = start;

    while(temp.getNext() != null) {
        temp = temp.getNext();
    }
        Node newNode = new Node(id, name, null);
        temp.setNext(newNode);
    }
}


public void display() {
    if(start == null) {
        System.out.println("\nThe list is empty!");
    } 
    else {
        Node temp = start;

    while(temp.getNext() != null) {
        System.out.println("ID : " + temp.getID() +  " Name : " + temp.getName());
        temp = temp.getNext();
    }
    }
}

public void delete(int id, String name) {
    Node previous =  start;
    Node temp = start;

    while(temp.getID() != id) {
        if(temp.getNext() == null) {
            System.out.println("\nElement "+ id + " not found !");
        break;
    }

    while(temp.getName() != name) {
        if(temp.getNext() == null) {
            System.out.println("\nElement "+ name + " not found !");
        break;
    }

        previous = temp;
        temp = temp.getNext();

    }
    if(temp == start) {
        start = start.getNext();
    } 
    else {
        previous.setNext(temp.getNext());
    }
    }
}
}

この場合、プログラムはリストに格納されているすべてのコンテンツを生成しますが、最後のコンテンツは生成しません。

つまり、格納されている最初の 3 つのデータは問題なく出力できますが、次の行はプログラムによって表示されません。

list.create(3863,"ジョニー");

私のコードの何が問題なのかを知ることができますか? 前もって感謝します!=)

4

5 に答える 5

2

temp.getNext()で 2 回呼び出す必要はありませんdisplay()。以下を使用できます。

public void display() {
    if(start == null) {
        System.out.println("\nThe list is empty!");
    } 
    else {
        Node temp = start;

        while(temp != null) {
            System.out.println("ID : " + temp.getID() +  " Name : " + temp.getName());
            temp = temp.getNext();
        }
    }
}

temp.getNext()ループを停止する必要があるかどうかを確認するために呼び出すと、最後の要素が失われます。

于 2013-11-07T11:45:21.853 に答える
1

問題はwhileループにあります。これを試してください

while(true) {

    System.out.println("ID : " + temp.getID() +  " Name : " + temp.getName());
    temp = temp.getNext();
    if(temp==null) break;

}
于 2013-11-07T11:45:07.157 に答える
1

表示コードでは、最後の要素を出力する前に停止しています。

else {
    Node temp = start;

    while(temp.getNext() != null) {
        System.out.println("ID : " + temp.getID() +  " Name : " + temp.getName());
        temp = temp.getNext();
    }
}

行は、 が の場合はループが実行されないことwhile(temp.getNext() != null)を意味しますが、最後の要素のis はリストの最後にあるためです。次の行を追加する必要があります。whiletemp.getNext()nullgetNext()null

System.out.println("ID : " + temp.getID() +  " Name : " + temp.getName());

while ループの後、最後の要素を出力します。

temp.getNext()また、そのループで 2 回実行しています。結果をローカル変数に格納すると、そのメソッドを 2 回呼び出す必要がなくなります。

于 2013-11-07T11:43:26.587 に答える
0

私はこれを使用します:

while(temp.hasNext()) {
    ...
}

次に、最後の要素でループに入ります。2 回実行して要素を失っていgetNetxt()ます。

于 2013-11-07T11:44:55.637 に答える
0
   while(temp.getNext() != null) {
    System.out.println("ID : " + temp.getID() +  " Name : " + temp.getName());
    temp = temp.getNext();
}

これは、最後のノードで次のノードが null になるため、最後のノードが表示されないことを意味します。

そのため、次のように while ループの後に印刷行を追加するだけです。

       while(temp.getNext() != null) {
    System.out.println("ID : " + temp.getID() +  " Name : " + temp.getName());
    temp = temp.getNext();
}
("ID : " + temp.getID() +  " Name : " + temp.getName());
于 2013-11-07T11:42:54.110 に答える