3

编辑:不知道为什么,但代码似乎现在可以正常工作而无需任何编辑。jGrasp 调试器可能有问题吗?

===

好的。所以这是我的家庭作业,将在 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

我认为您正在从该方法返回最后一个节点,而您需要返回第一个节点,因为它包含所有其他链接节点。您应该返回第一个节点而不是当前节点。

如果您仍然有问题,请向我们展示您是如何测试它以得出它仅包含最后一个元素的结论。

于 2013-01-20T05:23:11.970 回答
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 回答