3

編集:理由はわかりませんが、コードは編集なしで機能しているようです。jGrasp デバッガーに問題があった可能性はありますか?

===

Ok。ですから、これは今から 2 週間後に割り当てられる私の宿題ですが、私は有利なスタートを切りたいと思っています。私のコードを修正したり、正しいコードを共有したりしないでください。私がやっていることのエラーを特定できれば、それは素晴らしいことです.

したがってnode、次のコンストラクターがあります。

public node(String name)
public node(String name, node next)

リンクされたリストにpublic method(ArrayList<String> names)すべての要素を追加する別のクラスにメソッドを記述する必要があります。names

これが私が今持っているものです:

public method(ArrayList<String> names) {
    if(names.size() == 0 || names == null) {
        throw new IllegalArgumentException();
    }

    // Handle base case, create first node
    first = new node(names.get(0));    // first has been declared above

    node current = first;

    // Add at the end of the list
    for(int i = 1; i < names.size(); i++) {
        current.next = new node(names.get(i));
        current = current.next;
    }

}

これが必要に応じて機能しない理由がわかりません。私は jGrasp を使用しており、デバッガーを使用しています。最後に、値が 1 つだけのリンク リスト (ArrayList の最後の要素) が得られることがわかります。なんで?

私は Java の初心者であり、さらに高度な機能を使用すると混乱するだけなので、高度な機能の使用はお勧めしません。

4

2 に答える 2

0

私はあなたのコードを使って(そしてJavaBean標準のネーミングを使って)テストをしました、そしてあなたのメソッドはうまくいきます。これがコードサンプルです(ここにいくつかの長いコードブロックがあります):

import java.util.ArrayList;

class Node {
    private String data;
    private Node next;

    public Node(String data) {
        this.data = data;
        this.next = null;
    }

    public Node(String data, Node next) {
        this.data = data;
        this.next = next;
    }

    public String getData() {
        return data;
    }

    public Node getNext() {
        return next;
    }

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

public class NodeTest {

    private Node first;

    public NodeTest() {
        this.first = null;
    }

    //hint: this is your code, no changes were made here except by the method name
    public void insertArrayList(ArrayList<String> names) {
        //changing the order of the comparison. Java evaluates from left to right
        if(names == null || names.size() == 0) {
            throw new IllegalArgumentException();
        }

        // Handle base case, create first node
        first = new Node(names.get(0));    // first has been declared above

        Node current = first;

        // Add at the end of the list
        for(int i = 1; i < names.size(); i++) {
            current.setNext(new Node(names.get(i)));
            current = current.getNext();
        }
    }

    public void traverse() {
        Node current = first;
        while (current != null) {
            System.out.println(current.getData());
            current = current.getNext();
        }
    }

    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        names.add("Hello");
        names.add("world!");
        NodeTest nodeTest = new NodeTest();
        nodeTest.insertArrayList(names);
        nodeTest.traverse();
    }
}

結果:

Hello
world!

したがって、以前のコメントに投稿されているように、リンクリストがいっぱいになっているかどうかをテストする方法に問題があるか、表示されていないコードのどこかに問題がある可能性があります。

于 2013-01-20T05:21:37.583 に答える
0

メソッドから最後のノードを返していると思いますが、最初のノードにはさらにリンクされているすべてのノードが含まれているため、最初のノードを返す必要があります。現在のノードではなく、最初のノードを返す必要があります。

それでも問題が発生する場合は、最後の要素のみが含まれていると結論付けるために、どのようにテストしているかを示してください。

于 2013-01-20T05:23:11.970 に答える