2015-12-13 67 views
1

的方法裏面我有一堆添加到待辦事項列表list2016日期的,現在我需要這些待辦事項列表項目按日期進行排序(第一最快,最新的最後一個)。排序日期鏈表

應該一切發生我add方法裏面,但我不知道怎麼做。有任何想法嗎?

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; 
    int size; 

    public ToDoList() 
    { 
     first = null; 
     size = 0; 
    } 

    public void add(ToDoListEntry newTask) 
    { 
     if (first == null) 
     { 
      first = newTask; 
     } 
     else 
     { 
      ToDoListEntry zeiger = first; 
      while (zeiger.next != null) 
      { 
       zeiger = zeiger.next; 
      } 
      zeiger.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; 
    } 
} 

而在最後,主類。它應該創建一個新的ToDoList,並打印出來(請注意,我並沒有包括print()法):

public class MyMainClass 
{ 
    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

你會如何做手工嗎?假設您已經對發票進行了排序,並且您發現一張舊發票必須插入到一堆發票的正確位置。你的戰略是什麼? –

+0

你爲什麼不使用內置的集合象一個ArrayList/LinkedList的(而不是創建自己的實現鏈表),並使用自定義排序比較呢? – Keammoort

+1

是否有一個原因,你必須創建自己的鏈表結構,而不是使用Java集合類?即這是作業嗎? – paisanco

回答

2

這是做它的低效和混亂的方式。但是爲了實現你想要的,我改變了你的兩個類。這些課程是您的ToDoList課程和您的main課程。

ToDoList.java

import java.util.*; 
import java.time.*; 

public class ToDoList 
{ 
    ToDoListEntry first; 
    ArrayList<LocalDate> datesList = new ArrayList(); 
    ArrayList<String> results = new ArrayList(); 

    public ToDoList() 
    { 
     first = null; 
    } 

    public void add(ToDoListEntry newTask) 
    { 
     if (first == null) 
     { 
      first = newTask; 
     } 
     else 
     { 
      ToDoListEntry zeiger = first; 
      while (zeiger.next != null) 
      { 
       zeiger = zeiger.next; 
      } 
      zeiger.next = newTask; 
     } 
    } 

    public void sortDates() 
    { 
     Collections.sort(datesList); 
    } 

    public void compareAndSort() 
    { 
     ArrayList<String> tempDates = new ArrayList(); 
     for(LocalDate lD:datesList) 
     { 
      tempDates.add(lD+""); 
     } 
     ArrayList<String> tempSorted = new ArrayList(); 
     for(String s:tempDates) 
     { 
      for(String a:results) 
      { 
       if(a.contains(s)) 
       { 
        if(!tempSorted.contains(a)) 
        { 
         tempSorted.add(a); 
        } 
       } 
      } 
     } 

     results=tempSorted; 
     for(String s:results) 
     { 
      System.out.println(s); 
     } 
    } 

    public String print() 
    { 
     String result = ""; 
     if (first == null) 
     { 
      result = "Empty list!\n"; 
      System.out.println(result); 
     } 
     else 
     { 
      ToDoListEntry pointer = first; 
      while (pointer != null) 
      { 
       result += "Until " + pointer.date + " Task: "+ pointer.task +"\n"; 
       if(LocalDate.now().isBefore(pointer.date)) 
       { 
        results.add("Until " + pointer.date + " Task: "+ pointer.task); 
       } 

       datesList.add(pointer.date); 
       pointer = pointer.next; 
      } 
     } 
     return result; 
    } 

    public String printDates() 
    { 
     String dates = datesList.toString(); 
     System.out.println(dates); 
     return dates; 
    } 
} 

Test.java(這是你所描述的爲您main類)

import java.util.*; 
import java.time.*; 

import java.util.*; 
import java.time.*; 

public class Test 
{ 
    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(2015, 2, 18), "Hand in Homework")); 
     list2016.add(new ToDoListEntry(LocalDate.of(2016, 6, 3), "Buy apples")); 
     list2016.add(new ToDoListEntry(LocalDate.of(2016, 10, 11), "Read Books")); 
     list2016.add(new ToDoListEntry(LocalDate.of(2016, 10, 11), "Read Homework")); 

     list2016.print(); 
     list2016.sortDates(); 
     list2016.compareAndSort(); 
    } 
} 

我有兩個音符。

首先是因爲你明確表示soonest我添加了一個功能,刪除日期是已經超過了當前的日期。如果你喜歡,你可以稍後更改if語句if(LocalDate.now().isBefore(pointer.date))

其次你的ToDoList.print()實際上不會打印任何東西 - 除非first爲空。