试图将ArrayList转换为LinkedList.不知道为什么这不起作用



编辑:不知道为什么,但代码现在似乎没有任何编辑工作。可能是jGrasp调试器的问题?

= = =

Ok。这是我两周后的家庭作业,但我想提前开始。请不要纠正我的代码,或者分享正确的代码。如果你能指出我所做的错误,那就太好了。

所以我有一个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新手,使用任何高级功能只会让我感到困惑。

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

如果你仍然有问题,请告诉我们你是如何测试它,得出结论,它只包含最后一个元素

我使用您的代码(并使用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!

所以,正如在之前的评论中发布的,也许有一个问题,你如何测试,如果你的链表已被填满,或者你有一个问题在其他地方的未显示的代码。

相关内容

  • 没有找到相关文章

最新更新