我将一堆日期添加到待办事项列表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 :(得分: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
实际上不会打印任何内容。