2015-12-13 187 views
1

我們的老師給了我們一個新的任務,並且我無法弄清楚這個問題。將另一個類的元素添加到數組列表中

有3個不同的java類,我只允許更改ToDoList類。在那裏,我想添加一個新的列表,以便主類能夠將新項目添加到我的待辦事項列表中。正如你在下面看到的,我試圖初始化一個新的列表,但沒有奏效。

我的錯誤在哪裏?

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; 
} 
} 

而在最後,主要的類應該是爲了建立一個新的待辦事項列表,並打印出(請注意,我並沒有包括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

您是否已導入它?請發佈錯誤。 – Maroun

+0

您能否將您提到的錯誤添加到您的帖子中? – hotzst

+0

定義「不起作用」。恰恰。什麼是你得到的錯誤信息?另外,考慮到ToDoListEntry有一個名爲'next'的字段,其類型爲ToDoListEntry,我認爲你不應該使用ArrayList,而是將條目鏈接到彼此(即理解鏈表的原則)。 –

回答

4

當您添加新條目列表中,您沒有設置該條目中的下一個指針。但是在print()方法中,你使用下一個指針,但是(如果你不把它設置在別的地方)它仍然是空的。嘗試你的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; 
    } 
} 
+0

真的有幫助!感謝那!現在我只剩下一個問題了:如何按日期排序列表條目?所以第一個入口是下一個到期的待辦事項? – Yanlu

+0

@Yanlu你可以通過調用'Collections.sort(list);'來實現'Comparable ' – Androbin

相關問題