===
确定。所以这是我的作业任务,将在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的新手,使用任何进一步的高级功能只会让我感到困惑。
答案 0 :(得分:0)
我使用您的代码进行了测试(并使用JavaBean standard naming),您的方法运行正常。这是代码示例(这里有一些长代码块):
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!
因此,正如之前的评论中所述,如果您的链接列表已填满,或者您在非显示代码中的某个位置出现问题,则可能存在测试问题。
答案 1 :(得分:0)
我认为您正在返回该方法的最后一个节点,而您需要返回第一个节点,因为它包含所有其他链接节点。您应该返回第一个节点而不是当前节点。
如果您仍然遇到问题,请告诉我们您是如何测试的,以确定它只包含最后一个元素。