编辑:不知道为什么,但代码现在似乎没有任何编辑工作。可能是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!
所以,正如在之前的评论中发布的,也许有一个问题,你如何测试,如果你的链表已被填满,或者你有一个问题在其他地方的未显示的代码。