我们的老师给了我们一个新的任务,不知怎的,我无法弄清楚问题。
有3种不同的java类,我只允许更改ToDoList类。在那里,我想添加一个新的List,以便主类能够将新项添加到我的待办事项列表中。正如您在下面看到的,我尝试初始化一个新列表,但这不起作用。
我的错误在哪里?
public class ToDoListEntry {
String task;
LocalDate date;
ToDoListEntry next;
public ToDoListEntry(LocalDate date, String task) {
this.task = task;
this.date = date;
}
}
接下来我试图添加一个数组,但哪个不起作用:
public class ToDoList {
ToDoListEntry first;
public ArrayList<ToDoListEntry> todolist;
public ToDoList (){
todolist = new ArrayList<ToDoListEntry>();
}
public void add(ToDoListEntry newTask) {
todolist.add(newTask);
}
public String print() {
String result = "";
if (first == null) {
result = "Empty list!\n";
} else {
ToDoListEntry pointer = first;
while (pointer != null) {
result += "Until " + pointer.date + " Task: "
+ pointer.task +"\n";
pointer = pointer.next;
}
}
System.out.println(result);
return result;
}
}
最后,主类应该创建一个新的ToDo列表并打印出来(注意我没有包含print()方法):
public static void main(String[] args) {
System.out.println("Test 00: Empty List");
ToDoList list2016 = new ToDoList();
list2016.print();
System.out.println("Test 01: add");
list2016.add(new ToDoListEntry(LocalDate.of(2016, 8, 15), "Do workout"));
list2016.add(new ToDoListEntry(LocalDate.of(2016, 6, 3), "Buy apples"));
list2016.add(new ToDoListEntry(LocalDate.of(2016, 10, 11), "Read Books"));
list2016.print();
答案 0 :(得分:4)
当您向列表中添加新条目时,您不必设置该条目的下一个指针。但是在print()方法中,你使用下一个指针,但是(如果你不在其他地方设置它)它仍然是null。尝试你的add()方法:
public void add(ToDoListEntry newTask) {
todolist.add(newTask);
if (todolist.size() >= 2) todolist.get(todolist.size()-2).next = newTask;
}
但是你确定你可以在这里使用ArrayList吗?我得到的印象是你必须实现一个链表。在这种情况下,代码看起来像这样:
class ToDoListEntry {
String task;
LocalDate date;
ToDoListEntry next;
public ToDoListEntry(LocalDate date, String task) {
this.task = task;
this.date = date;
}
}
public class ToDoList {
ToDoListEntry first;
int size;
public ToDoList (){
first = null;
size = 0;
}
public void add(ToDoListEntry newTask) {
if (first == null){
first = newTask;
}else{
ToDoListEntry pointer = first;
while (pointer.next != null){
pointer = pointer.next;
}
pointer.next = newTask;
}
size++;
}
public String print() {
String result = "";
if (first == null) {
result = "Empty list!\n";
} else {
ToDoListEntry pointer = first;
while (pointer != null) {
result += "Until " + pointer.date + " Task: " + pointer.task +"\n";
pointer = pointer.next;
}
}
System.out.println(result);
return result;
}
}