From 6eed652eac2aa2e0a5100b68dd95785d15279bcc Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Tue, 1 Sep 2020 23:09:48 +0800 Subject: [PATCH 01/19] level 0 --- src/main/java/Duke.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d313334cc..9203b61a2e 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,10 +1,17 @@ public class Duke { public static void main(String[] args) { + String horizontalLine = "----------------------------------------"; String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); + System.out.println(horizontalLine); + System.out.println(logo); + System.out.println("Hello! I'm Duke"); + System.out.println("What can I do for you?"); + System.out.println(horizontalLine); + System.out.println("Bye. Hope to see you again soon!"); + System.out.println(horizontalLine); } } From 77276db018c00d128bac2beb61b513133ee457c6 Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Thu, 3 Sep 2020 22:58:45 +0800 Subject: [PATCH 02/19] level 1 --- src/main/java/Duke.java | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 9203b61a2e..0fe1ef97a7 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,17 +1,22 @@ +import java.util.Scanner; public class Duke { + static String horizontalLine = "--------------------------------------------------"; + public static void main(String[] args) { - String horizontalLine = "----------------------------------------"; - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println(horizontalLine); - System.out.println(logo); - System.out.println("Hello! I'm Duke"); - System.out.println("What can I do for you?"); - System.out.println(horizontalLine); - System.out.println("Bye. Hope to see you again soon!"); - System.out.println(horizontalLine); + System.out.println(horizontalLine + "\nHello! I'm Duke\n" + "What can I do for you?\n" + horizontalLine); + echoCommand(); + } + + public static void echoCommand(){ + String command; + Scanner in = new Scanner(System.in); + command = in.nextLine(); + while(!command.equals("bye")){ + System.out.println(horizontalLine); + System.out.println(command); + System.out.println(horizontalLine); + command = in.nextLine(); + } + System.out.println(horizontalLine +"\nBye. Hope to see you again soon\n"+ horizontalLine); } } From b1251c08b45db5cf1474fe6fc8cace3e850da8b8 Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Thu, 3 Sep 2020 23:16:13 +0800 Subject: [PATCH 03/19] level 2 Add, List --- src/main/java/Duke.java | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 0fe1ef97a7..3b50b32d57 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,22 +1,39 @@ import java.util.Scanner; public class Duke { static String horizontalLine = "--------------------------------------------------"; + static String[] thingsToDo = new String[100]; + static int thingsCounted = 0; public static void main(String[] args) { System.out.println(horizontalLine + "\nHello! I'm Duke\n" + "What can I do for you?\n" + horizontalLine); - echoCommand(); + storeTextAndList(); } - public static void echoCommand(){ - String command; + public static void storeTextAndList() { + String text; Scanner in = new Scanner(System.in); - command = in.nextLine(); - while(!command.equals("bye")){ - System.out.println(horizontalLine); - System.out.println(command); - System.out.println(horizontalLine); - command = in.nextLine(); + text = in.nextLine(); + while (!text.equals("bye")) { + if (text.equals("list")) { + System.out.println(horizontalLine); + int count = 0; + for (count = 0; count < thingsCounted; count++) { + System.out.print(String.format("%d. ", count + 1)); + System.out.println(thingsToDo[count]); + } + System.out.println(horizontalLine); + } else { + System.out.println(horizontalLine); + System.out.println("added: " + text); + System.out.println(horizontalLine); + thingsToDo[thingsCounted] = text; + thingsCounted++; + } + text = in.nextLine(); } - System.out.println(horizontalLine +"\nBye. Hope to see you again soon\n"+ horizontalLine); + System.out.println(horizontalLine); + System.out.println("Bye. Hope to see you again soon"); + System.out.println(horizontalLine); } } + From f003111df477443388c24283b3c6e6f6952fb4d4 Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 4 Sep 2020 00:03:53 +0800 Subject: [PATCH 04/19] level 3 Mark as Done --- src/main/java/Duke.java | 25 +++++++++++++++++++------ src/main/java/Task.java | 21 +++++++++++++++++++++ 2 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 src/main/java/Task.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 3b50b32d57..9d72ffb314 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,8 +1,10 @@ +import java.util.Arrays; import java.util.Scanner; public class Duke { static String horizontalLine = "--------------------------------------------------"; static String[] thingsToDo = new String[100]; static int thingsCounted = 0; + static Task [] tasks=new Task[100]; public static void main(String[] args) { System.out.println(horizontalLine + "\nHello! I'm Duke\n" + "What can I do for you?\n" + horizontalLine); @@ -14,26 +16,37 @@ public static void storeTextAndList() { Scanner in = new Scanner(System.in); text = in.nextLine(); while (!text.equals("bye")) { + System.out.println(horizontalLine); if (text.equals("list")) { - System.out.println(horizontalLine); int count = 0; for (count = 0; count < thingsCounted; count++) { - System.out.print(String.format("%d. ", count + 1)); - System.out.println(thingsToDo[count]); + System.out.print(String.format("%d. ",count+1)); + System.out.println(tasks[count].getStatusIcon() + thingsToDo[count]); } System.out.println(horizontalLine); - } else { - System.out.println(horizontalLine); + } + else if(text.contains("done")){ + int index = Integer.parseInt(text.substring(5)); + doneTask(index); + } + else { System.out.println("added: " + text); - System.out.println(horizontalLine); thingsToDo[thingsCounted] = text; + Task task = new Task(text); + tasks[thingsCounted] = task; thingsCounted++; } + System.out.println(horizontalLine); text = in.nextLine(); } System.out.println(horizontalLine); System.out.println("Bye. Hope to see you again soon"); System.out.println(horizontalLine); } + + public static void doneTask(int index){ + tasks[index-1].taskDone(); + System.out.println("Nice! I've marked this task as done:\n" +tasks[index-1].getStatusIcon()+thingsToDo[index-1]); + } } diff --git a/src/main/java/Task.java b/src/main/java/Task.java new file mode 100644 index 0000000000..45402aa367 --- /dev/null +++ b/src/main/java/Task.java @@ -0,0 +1,21 @@ +public class Task { + protected String description; + protected boolean isDone; + + public Task(String description) { + this.description = description; + this.isDone = false; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getStatusIcon() { + return (isDone ? "\u2713" : "\u2718"); //return tick or X symbols + } + + public void taskDone(){ + this.isDone=true; + } +} From 12431e78b3aa675b4e24a34df04455c8872aab0d Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 4 Sep 2020 00:06:14 +0800 Subject: [PATCH 05/19] A-CodingStandard --- src/main/java/Duke.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 9d72ffb314..7fcac0cc4d 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -21,7 +21,7 @@ public static void storeTextAndList() { int count = 0; for (count = 0; count < thingsCounted; count++) { System.out.print(String.format("%d. ",count+1)); - System.out.println(tasks[count].getStatusIcon() + thingsToDo[count]); + System.out.println('[' + tasks[count].getStatusIcon() + ']' + thingsToDo[count]); } System.out.println(horizontalLine); } From e19078da7bd34eb1ea0ebc434c9b9c6f9712ddc7 Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 4 Sep 2020 00:56:32 +0800 Subject: [PATCH 06/19] level 4 --- src/main/java/Deadline.java | 17 ++++++++ src/main/java/Duke.java | 80 +++++++++++++++++++++++++++---------- src/main/java/Event.java | 16 ++++++++ src/main/java/Todo.java | 13 ++++++ 4 files changed, 106 insertions(+), 20 deletions(-) create mode 100644 src/main/java/Deadline.java create mode 100644 src/main/java/Event.java create mode 100644 src/main/java/Todo.java diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java new file mode 100644 index 0000000000..8192784507 --- /dev/null +++ b/src/main/java/Deadline.java @@ -0,0 +1,17 @@ +public class Deadline extends Task { + + protected String byDate; + + public Deadline(String description, String byDate) { + super(description); + this.byDate=byDate; + } + + public String getTypeIcon(){ + return "[D]"; + } + + public String toString(){ + return this.getTypeIcon() + this.getStatusIcon() + description + "(by: " + byDate + ")"; + } +} diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 7fcac0cc4d..da90721c7a 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -2,9 +2,8 @@ import java.util.Scanner; public class Duke { static String horizontalLine = "--------------------------------------------------"; - static String[] thingsToDo = new String[100]; static int thingsCounted = 0; - static Task [] tasks=new Task[100]; + static Task[] tasks = new Task[100]; public static void main(String[] args) { System.out.println(horizontalLine + "\nHello! I'm Duke\n" + "What can I do for you?\n" + horizontalLine); @@ -20,33 +19,74 @@ public static void storeTextAndList() { if (text.equals("list")) { int count = 0; for (count = 0; count < thingsCounted; count++) { - System.out.print(String.format("%d. ",count+1)); - System.out.println('[' + tasks[count].getStatusIcon() + ']' + thingsToDo[count]); + System.out.print(count + 1 + '.'); + System.out.println(tasks[count]); } System.out.println(horizontalLine); - } - else if(text.contains("done")){ + } else if (text.contains("done")) { int index = Integer.parseInt(text.substring(5)); doneTask(index); - } - else { - System.out.println("added: " + text); - thingsToDo[thingsCounted] = text; - Task task = new Task(text); - tasks[thingsCounted] = task; - thingsCounted++; + } else { + if (text.contains("todo")) { + addTodoTask(text); + } else if (text.contains("deadline")) { + addDeadlineTask(text); + } else { + addEventTask(text); + } + System.out.println(horizontalLine); + text = in.nextLine(); } System.out.println(horizontalLine); - text = in.nextLine(); + System.out.println("Bye. Hope to see you again soon"); + System.out.println(horizontalLine); } - System.out.println(horizontalLine); - System.out.println("Bye. Hope to see you again soon"); - System.out.println(horizontalLine); } + public static void addTodoTask(String text){ + String todoDescription; + todoDescription = text.substring(5); + Task task = new Todo(todoDescription); + tasks[thingsCounted] = task; + thingsCounted++; + printTask(task); + } + + public static void addDeadlineTask(String text){ + String deadlineDescription; + String deadlineByDate; + int getIndex; + getIndex = text.indexOf("/"); + deadlineDescription = text.substring(9, getIndex - 1); + deadlineByDate = text.substring(getIndex + 4); + Task task = new Deadline(deadlineDescription, deadlineByDate); + tasks[thingsCounted] = task; + thingsCounted++; + printTask(task); + } + + public static void addEventTask(String text){ + String eventDescription; + String eventAtDate; + int getIndex; + getIndex = text.indexOf("/"); + eventDescription = text.substring(6, getIndex - 1); + eventAtDate = text.substring(getIndex + 4); + Task task = new Event(eventDescription, eventAtDate); + tasks[thingsCounted] = task; + thingsCounted++; + printTask(task); + } + + public static void printTask(Task task){ + System.out.println("Got it. I've added this task: "); + System.out.println(task); + System.out.println("Now you have " + thingsCounted + " tasks in the list."); + } + + public static void doneTask(int index){ - tasks[index-1].taskDone(); - System.out.println("Nice! I've marked this task as done:\n" +tasks[index-1].getStatusIcon()+thingsToDo[index-1]); + tasks[index - 1].taskDone(); + System.out.println("Nice! I've marked this task as done:\n" + tasks[index - 1]); } } - diff --git a/src/main/java/Event.java b/src/main/java/Event.java new file mode 100644 index 0000000000..6e705c8788 --- /dev/null +++ b/src/main/java/Event.java @@ -0,0 +1,16 @@ +public class Event extends Task{ + protected String atDate; + + public Event(String description, String atDate) { + super(description); + this.atDate=atDate; + } + + public String getTypeIcon(){ + return "[D]"; + } + + public String toString(){ + return this.getTypeIcon() + this.getStatusIcon() + description + " (at: " + atDate + ")"; + } +} diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java new file mode 100644 index 0000000000..341048617b --- /dev/null +++ b/src/main/java/Todo.java @@ -0,0 +1,13 @@ +public class Todo extends Task{ + public Todo(String description) { + super(description); + } + + public String getTypeIcon(){ + return "[T]"; + } + + public String toString(){ + return this.getTypeIcon() + this.getStatusIcon() + description; + } +} From 93cdea99fef218046e9e12609ddd84c2afa1942c Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 01:52:01 +0800 Subject: [PATCH 07/19] Improve Code Quality --- src/main/java/Deadline.java | 2 +- src/main/java/Duke.java | 28 ++++++++++++++++------------ src/main/java/Task.java | 6 +++++- src/main/java/Todo.java | 1 + 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index 8192784507..2ae45b1e1e 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -12,6 +12,6 @@ public String getTypeIcon(){ } public String toString(){ - return this.getTypeIcon() + this.getStatusIcon() + description + "(by: " + byDate + ")"; + return this.getTypeIcon() + this.getStatusIcon() + description + " (by: " + byDate + ")"; } } diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index da90721c7a..0b714b322f 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -5,11 +5,6 @@ public class Duke { static int thingsCounted = 0; static Task[] tasks = new Task[100]; - public static void main(String[] args) { - System.out.println(horizontalLine + "\nHello! I'm Duke\n" + "What can I do for you?\n" + horizontalLine); - storeTextAndList(); - } - public static void storeTextAndList() { String text; Scanner in = new Scanner(System.in); @@ -17,12 +12,7 @@ public static void storeTextAndList() { while (!text.equals("bye")) { System.out.println(horizontalLine); if (text.equals("list")) { - int count = 0; - for (count = 0; count < thingsCounted; count++) { - System.out.print(count + 1 + '.'); - System.out.println(tasks[count]); - } - System.out.println(horizontalLine); + listTask(); } else if (text.contains("done")) { int index = Integer.parseInt(text.substring(5)); doneTask(index); @@ -89,4 +79,18 @@ public static void doneTask(int index){ tasks[index - 1].taskDone(); System.out.println("Nice! I've marked this task as done:\n" + tasks[index - 1]); } -} + + public static void listTask(){ + System.out.println(horizontalLine); + System.out.println("Here are the tasks in your list:"); + for (int count = 0; count < thingsCounted; count++) { + System.out.println((count+1)+"."+tasks[count]); + } + System.out.println(horizontalLine); + } + + public static void main(String[] args) { + System.out.println(horizontalLine + "\nHello! I'm Duke\n" + "What can I do for you?\n" + horizontalLine); + storeTextAndList(); + } +} \ No newline at end of file diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 45402aa367..857bae1654 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -12,10 +12,14 @@ public void setDescription(String description) { } public String getStatusIcon() { - return (isDone ? "\u2713" : "\u2718"); //return tick or X symbols + return (isDone ? "[\u2713]" : "[\u2718]"); //return tick or X symbols } public void taskDone(){ this.isDone=true; } + + public String toString(){ + return this.getStatusIcon() + description; + } } diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java index 341048617b..0f9375a016 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Todo.java @@ -1,4 +1,5 @@ public class Todo extends Task{ + public Todo(String description) { super(description); } From 8c3c84ee14a9c679bf3e9c1849808755c0cd54d1 Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 02:06:25 +0800 Subject: [PATCH 08/19] add input, add expected output, change runtest.bat, change runtest.sh --- text-ui-test/EXPECTED.TXT | 40 +++++++++++++++++++++++++++++++++------ text-ui-test/input.txt | 7 +++++++ text-ui-test/runtest.bat | 2 +- text-ui-test/runtest.sh | 6 +----- 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 657e74f6e7..d59bbf4a29 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,7 +1,35 @@ -Hello from - ____ _ -| _ \ _ _| | _____ -| | | | | | | |/ / _ \ -| |_| | |_| | < __/ -|____/ \__,_|_|\_\___| +____________________________________________________________ + Hello! I'm Duke + What can I do for you? +____________________________________________________________ +____________________________________________________________ +Got it. I've added this task: +[T][✘]borrow book +Now you have 1 tasks in the list. +____________________________________________________________ +____________________________________________________________ +1. [T][✘]borrow book +____________________________________________________________ +____________________________________________________________ +Got it. I've added this task: +[D][✘]return book (by: Sunday) +Now you have 2 tasks in the list. +____________________________________________________________ +____________________________________________________________ +Got it. I've added this task: +[D][✘]project (at: Mon 2-4pm) +Now you have 3 tasks in the list. +____________________________________________________________ +____________________________________________________________ +1. [T][✘]borrow book +2. [D][✘]return book (by: Sunday) +3. [D][✘]project (at: Mon 2-4pm) +____________________________________________________________ +____________________________________________________________ +Nice! I've marked this task as done: +[D][✓]return book (by: Sunday) +____________________________________________________________ +____________________________________________________________ +Bye. Hope to see you again soon +____________________________________________________________ \ No newline at end of file diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index e69de29bb2..55eb8a0066 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -0,0 +1,7 @@ +todo borrow book +list +deadline return book /by Sunday +event project /at Mon 2-4pm +list +done 2 +bye \ No newline at end of file diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index d0facc6310..4279957574 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -7,7 +7,7 @@ REM delete output from previous run del ACTUAL.TXT REM compile the code into the bin folder -javac -cp ..\src -Xlint:none -d ..\bin ..\src\main\java\Duke.java +javac -cp ..\src -Xlint:none -d ..\bin ..\src\main\java\*.java IF ERRORLEVEL 1 ( echo ********** BUILD FAILURE ********** exit /b 1 diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh index e169618a34..511030134f 100644 --- a/text-ui-test/runtest.sh +++ b/text-ui-test/runtest.sh @@ -13,7 +13,7 @@ then fi # compile the code into the bin folder, terminates if error occurred -if ! javac -cp ../src -Xlint:none -d ../bin ../src/main/java/Duke.java +if ! javac -cp ../src -Xlint:none -d ../bin ../src/main/java/*.java then echo "********** BUILD FAILURE **********" exit 1 @@ -22,10 +22,6 @@ fi # run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT java -classpath ../bin Duke < input.txt > ACTUAL.TXT -# convert to UNIX format -cp EXPECTED.TXT EXPECTED-UNIX.TXT -dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT - # compare the output to the expected output diff ACTUAL.TXT EXPECTED-UNIX.TXT if [ $? -eq 0 ] From f4159dab70edac368b00e610653e90176b6c2f09 Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 02:39:41 +0800 Subject: [PATCH 09/19] add exception --- src/main/java/Duke.java | 64 ++++++++++++++++++++++++-------- src/main/java/DukeException.java | 3 ++ src/main/java/Event.java | 2 +- 3 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 src/main/java/DukeException.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 0b714b322f..8c6e321440 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -5,36 +5,62 @@ public class Duke { static int thingsCounted = 0; static Task[] tasks = new Task[100]; - public static void storeTextAndList() { + public static void storeTextAndList() throws DukeException{ String text; Scanner in = new Scanner(System.in); text = in.nextLine(); while (!text.equals("bye")) { System.out.println(horizontalLine); - if (text.equals("list")) { - listTask(); - } else if (text.contains("done")) { - int index = Integer.parseInt(text.substring(5)); - doneTask(index); - } else { - if (text.contains("todo")) { - addTodoTask(text); - } else if (text.contains("deadline")) { - addDeadlineTask(text); + try { + if (text.equals("list")) { + listTask(); + } else if (text.contains("done")) { + int index = Integer.parseInt(text.substring(5)); + doneTask(index); } else { - addEventTask(text); + if (text.contains("todo")) { + addTodoTask(text); + } else if (text.contains("deadline")) { + addDeadlineTask(text); + } else if (text.contains("event")) { + addEventTask(text); + } else { + throw new DukeException(); + } } + }catch (DukeException e) { + dealWithException(text); + } System.out.println(horizontalLine); text = in.nextLine(); } System.out.println(horizontalLine); System.out.println("Bye. Hope to see you again soon"); System.out.println(horizontalLine); + } + + public static void dealWithException(String text){ + switch (text) { + case "todo": + System.out.println("The description of a todo cannot be empty."); + break; + case "deadline": + System.out.println("The description of a deadline cannot be empty."); + break; + case "event": + System.out.println("The description of a event cannot be empty."); + break; + default: + System.out.println(("Sorry, I don't know what this means.")); + break; } } - public static void addTodoTask(String text){ + public static void addTodoTask(String text) throws DukeException{ String todoDescription; + if(text.equals("todo")){ + throw new DukeException(); + } todoDescription = text.substring(5); Task task = new Todo(todoDescription); tasks[thingsCounted] = task; @@ -42,10 +68,13 @@ public static void addTodoTask(String text){ printTask(task); } - public static void addDeadlineTask(String text){ + public static void addDeadlineTask (String text) throws DukeException{ String deadlineDescription; String deadlineByDate; int getIndex; + if(text.equals("deadline")){ + throw new DukeException(); + } getIndex = text.indexOf("/"); deadlineDescription = text.substring(9, getIndex - 1); deadlineByDate = text.substring(getIndex + 4); @@ -55,10 +84,13 @@ public static void addDeadlineTask(String text){ printTask(task); } - public static void addEventTask(String text){ + public static void addEventTask(String text) throws DukeException{ String eventDescription; String eventAtDate; int getIndex; + if(text.equals("event")){ + throw new DukeException(); + } getIndex = text.indexOf("/"); eventDescription = text.substring(6, getIndex - 1); eventAtDate = text.substring(getIndex + 4); @@ -89,7 +121,7 @@ public static void listTask(){ System.out.println(horizontalLine); } - public static void main(String[] args) { + public static void main(String[] args) throws DukeException{ System.out.println(horizontalLine + "\nHello! I'm Duke\n" + "What can I do for you?\n" + horizontalLine); storeTextAndList(); } diff --git a/src/main/java/DukeException.java b/src/main/java/DukeException.java new file mode 100644 index 0000000000..5e322ffd47 --- /dev/null +++ b/src/main/java/DukeException.java @@ -0,0 +1,3 @@ +public class DukeException extends Exception { + +} diff --git a/src/main/java/Event.java b/src/main/java/Event.java index 6e705c8788..53963e1c06 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -7,7 +7,7 @@ public Event(String description, String atDate) { } public String getTypeIcon(){ - return "[D]"; + return "[E]"; } public String toString(){ From 771f5b6229bc6d9c12f3aa5fd7562cd2aa5f13a0 Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 02:47:35 +0800 Subject: [PATCH 10/19] level 5 --- src/main/java/Duke.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 8c6e321440..1835546933 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -42,16 +42,16 @@ public static void storeTextAndList() throws DukeException{ public static void dealWithException(String text){ switch (text) { case "todo": - System.out.println("The description of a todo cannot be empty."); + System.out.println("☹ OOPS!!! The description of a todo cannot be empty."); break; case "deadline": - System.out.println("The description of a deadline cannot be empty."); + System.out.println("☹ OOPS!!! The description of a deadline cannot be empty."); break; case "event": - System.out.println("The description of a event cannot be empty."); + System.out.println("☹ OOPS!!! The description of a event cannot be empty."); break; default: - System.out.println(("Sorry, I don't know what this means.")); + System.out.println(("☹ OOPS!!! I'm sorry, but I don't know what that means :-(")); break; } } From d72262932d310a36b480591348725b4932cbb33a Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 14:28:06 +0800 Subject: [PATCH 11/19] Add branch A-Package --- README.md | 4 ++-- src/main/java/{ => duke}/Duke.java | 22 ++++++++++++++------- src/main/java/{ => duke}/DukeException.java | 2 ++ src/main/java/{ => duke/task}/Deadline.java | 2 ++ src/main/java/{ => duke/task}/Event.java | 2 ++ src/main/java/{ => duke/task}/Task.java | 2 ++ src/main/java/{ => duke/task}/Todo.java | 2 ++ text-ui-test/EXPECTED.TXT | 2 +- text-ui-test/runtest.bat | 2 +- 9 files changed, 29 insertions(+), 11 deletions(-) rename src/main/java/{ => duke}/Duke.java (91%) rename src/main/java/{ => duke}/DukeException.java (76%) rename src/main/java/{ => duke/task}/Deadline.java (95%) rename src/main/java/{ => duke/task}/Event.java (94%) rename src/main/java/{ => duke/task}/Task.java (96%) rename src/main/java/{ => duke/task}/Todo.java (93%) diff --git a/README.md b/README.md index 9d95025bce..da61b7869f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Duke project template +# duke project template This is a project template for a greenfield Java project. It's named after the Java mascot _Duke_. Given below are instructions on how to use it. @@ -15,7 +15,7 @@ Prerequisites: JDK 11, update Intellij to the most recent version. 1. Click `Open or Import`. 1. Select the project directory, and click `OK` 1. If there are any further prompts, accept the defaults. -1. After the importing is complete, locate the `src/main/java/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below: +1. After the importing is complete, locate the `src/main/java/duke.java` file, right-click it, and choose `Run duke.main()`. If the setup is correct, you should see something like the below: ``` Hello from ____ _ diff --git a/src/main/java/Duke.java b/src/main/java/duke/Duke.java similarity index 91% rename from src/main/java/Duke.java rename to src/main/java/duke/Duke.java index 1835546933..62b3890cb2 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/duke/Duke.java @@ -1,11 +1,18 @@ -import java.util.Arrays; +package duke; + +import duke.task.Deadline; +import duke.task.Event; +import duke.task.Task; +import duke.task.Todo; + import java.util.Scanner; + public class Duke { static String horizontalLine = "--------------------------------------------------"; static int thingsCounted = 0; static Task[] tasks = new Task[100]; - public static void storeTextAndList() throws DukeException{ + public static void storeTextAndList() throws DukeException { String text; Scanner in = new Scanner(System.in); text = in.nextLine(); @@ -56,7 +63,7 @@ public static void dealWithException(String text){ } } - public static void addTodoTask(String text) throws DukeException{ + public static void addTodoTask(String text) throws DukeException { String todoDescription; if(text.equals("todo")){ throw new DukeException(); @@ -68,7 +75,7 @@ public static void addTodoTask(String text) throws DukeException{ printTask(task); } - public static void addDeadlineTask (String text) throws DukeException{ + public static void addDeadlineTask (String text) throws DukeException { String deadlineDescription; String deadlineByDate; int getIndex; @@ -84,7 +91,7 @@ public static void addDeadlineTask (String text) throws DukeException{ printTask(task); } - public static void addEventTask(String text) throws DukeException{ + public static void addEventTask(String text) throws DukeException { String eventDescription; String eventAtDate; int getIndex; @@ -121,8 +128,9 @@ public static void listTask(){ System.out.println(horizontalLine); } - public static void main(String[] args) throws DukeException{ - System.out.println(horizontalLine + "\nHello! I'm Duke\n" + "What can I do for you?\n" + horizontalLine); + public static void main(String[] args) throws DukeException { + System.out.println(horizontalLine + "\nHello! I'm Duke.Duke\n" + "What can I do for you?\n" + horizontalLine); storeTextAndList(); } + } \ No newline at end of file diff --git a/src/main/java/DukeException.java b/src/main/java/duke/DukeException.java similarity index 76% rename from src/main/java/DukeException.java rename to src/main/java/duke/DukeException.java index 5e322ffd47..e7ae283939 100644 --- a/src/main/java/DukeException.java +++ b/src/main/java/duke/DukeException.java @@ -1,3 +1,5 @@ +package duke; + public class DukeException extends Exception { } diff --git a/src/main/java/Deadline.java b/src/main/java/duke/task/Deadline.java similarity index 95% rename from src/main/java/Deadline.java rename to src/main/java/duke/task/Deadline.java index 2ae45b1e1e..d5a7c84ed4 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -1,3 +1,5 @@ +package duke.task; + public class Deadline extends Task { protected String byDate; diff --git a/src/main/java/Event.java b/src/main/java/duke/task/Event.java similarity index 94% rename from src/main/java/Event.java rename to src/main/java/duke/task/Event.java index 53963e1c06..882bffa9a5 100644 --- a/src/main/java/Event.java +++ b/src/main/java/duke/task/Event.java @@ -1,3 +1,5 @@ +package duke.task; + public class Event extends Task{ protected String atDate; diff --git a/src/main/java/Task.java b/src/main/java/duke/task/Task.java similarity index 96% rename from src/main/java/Task.java rename to src/main/java/duke/task/Task.java index 857bae1654..96f37f5916 100644 --- a/src/main/java/Task.java +++ b/src/main/java/duke/task/Task.java @@ -1,3 +1,5 @@ +package duke.task; + public class Task { protected String description; protected boolean isDone; diff --git a/src/main/java/Todo.java b/src/main/java/duke/task/Todo.java similarity index 93% rename from src/main/java/Todo.java rename to src/main/java/duke/task/Todo.java index 0f9375a016..0176ab6def 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/duke/task/Todo.java @@ -1,3 +1,5 @@ +package duke.task; + public class Todo extends Task{ public Todo(String description) { diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index d59bbf4a29..eeef2799e6 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,5 +1,5 @@ ____________________________________________________________ - Hello! I'm Duke + Hello! I'm duke What can I do for you? ____________________________________________________________ diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index 4279957574..7e25983237 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -15,7 +15,7 @@ IF ERRORLEVEL 1 ( REM no error here, errorlevel == 0 REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT -java -classpath ..\bin Duke < input.txt > ACTUAL.TXT +java -classpath ..\bin duke < input.txt > ACTUAL.TXT REM compare the output to the expected output FC ACTUAL.TXT EXPECTED.TXT From 1b5ae0ad6b3eebd69d24ee7728f47a0f364b5deb Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 14:53:12 +0800 Subject: [PATCH 12/19] code quality --- src/main/java/duke/Duke.java | 38 ++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 62b3890cb2..356a9f0d14 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -13,33 +13,34 @@ public class Duke { static Task[] tasks = new Task[100]; public static void storeTextAndList() throws DukeException { - String text; + String command; Scanner in = new Scanner(System.in); - text = in.nextLine(); - while (!text.equals("bye")) { + command = in.nextLine(); + while (!command.equals("bye")) { System.out.println(horizontalLine); try { - if (text.equals("list")) { + if (command.equals("list")) { listTask(); - } else if (text.contains("done")) { - int index = Integer.parseInt(text.substring(5)); - doneTask(index); - } else { - if (text.contains("todo")) { - addTodoTask(text); - } else if (text.contains("deadline")) { - addDeadlineTask(text); - } else if (text.contains("event")) { - addEventTask(text); - } else { + } else if (command.contains("done")) { + int index = Integer.parseInt(command.substring(5)); + if(index > thingsCounted){ throw new DukeException(); } + doneTask(index); + } else if (command.contains("todo")) { + addTodoTask(command); + } else if (command.contains("deadline")) { + addDeadlineTask(command); + } else if (command.contains("event")) { + addEventTask(command); + } else { + throw new DukeException(); } }catch (DukeException e) { - dealWithException(text); + dealWithException(command); } System.out.println(horizontalLine); - text = in.nextLine(); + command = in.nextLine(); } System.out.println(horizontalLine); System.out.println("Bye. Hope to see you again soon"); @@ -129,8 +130,7 @@ public static void listTask(){ } public static void main(String[] args) throws DukeException { - System.out.println(horizontalLine + "\nHello! I'm Duke.Duke\n" + "What can I do for you?\n" + horizontalLine); + System.out.println(horizontalLine + "\nHello! I'm Duke\n" + "What can I do for you?\n" + horizontalLine); storeTextAndList(); } - } \ No newline at end of file From a1ad436eb75d6425d0627fdb59963ec210dd3639 Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 15:08:33 +0800 Subject: [PATCH 13/19] level 6 --- src/main/java/duke/Duke.java | 42 +++++++++++++++++++++++++++--------- text-ui-test/runtest.bat | 2 +- text-ui-test/runtest.sh | 6 +++--- 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 356a9f0d14..b6a9712220 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -6,11 +6,13 @@ import duke.task.Todo; import java.util.Scanner; +import java.util.ArrayList; public class Duke { static String horizontalLine = "--------------------------------------------------"; static int thingsCounted = 0; - static Task[] tasks = new Task[100]; + //static Task[] tasks = new Task[100]; + public static ArrayList taskArray = new ArrayList<>(); public static void storeTextAndList() throws DukeException { String command; @@ -26,13 +28,19 @@ public static void storeTextAndList() throws DukeException { if(index > thingsCounted){ throw new DukeException(); } - doneTask(index); + markTaskAsDone(index); } else if (command.contains("todo")) { addTodoTask(command); } else if (command.contains("deadline")) { addDeadlineTask(command); } else if (command.contains("event")) { addEventTask(command); + } else if (command.contains("delete")){ + int index = Integer.parseInt(command.substring(7)); + if(index > thingsCounted){ + throw new DukeException(); + } + deleteItem(index); } else { throw new DukeException(); } @@ -71,8 +79,9 @@ public static void addTodoTask(String text) throws DukeException { } todoDescription = text.substring(5); Task task = new Todo(todoDescription); - tasks[thingsCounted] = task; + //tasks[thingsCounted] = task; thingsCounted++; + taskArray.add(task); printTask(task); } @@ -87,8 +96,9 @@ public static void addDeadlineTask (String text) throws DukeException { deadlineDescription = text.substring(9, getIndex - 1); deadlineByDate = text.substring(getIndex + 4); Task task = new Deadline(deadlineDescription, deadlineByDate); - tasks[thingsCounted] = task; + //tasks[thingsCounted] = task; thingsCounted++; + taskArray.add(task); printTask(task); } @@ -103,8 +113,9 @@ public static void addEventTask(String text) throws DukeException { eventDescription = text.substring(6, getIndex - 1); eventAtDate = text.substring(getIndex + 4); Task task = new Event(eventDescription, eventAtDate); - tasks[thingsCounted] = task; + //tasks[thingsCounted] = task; thingsCounted++; + taskArray.add(task); printTask(task); } @@ -115,16 +126,27 @@ public static void printTask(Task task){ } - public static void doneTask(int index){ - tasks[index - 1].taskDone(); - System.out.println("Nice! I've marked this task as done:\n" + tasks[index - 1]); + public static void markTaskAsDone(int index){ + taskArray.get(index-1).taskDone(); + System.out.println("Nice! I've marked this task as done:\n" +taskArray.get(index-1)); + } + + private static void deleteItem(int index) { + Task task = taskArray.remove(index - 1); + System.out.println("Noted. I've removed this task: "); + System.out.println(task); + thingsCounted--; + System.out.println("Now you have " + thingsCounted + " tasks in the list."); } public static void listTask(){ System.out.println(horizontalLine); System.out.println("Here are the tasks in your list:"); - for (int count = 0; count < thingsCounted; count++) { - System.out.println((count+1)+"."+tasks[count]); + int count = 1; + for(Task task : taskArray){ + System.out.print(count + ". "); + System.out.println(task); + count++; } System.out.println(horizontalLine); } diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index 7e25983237..1f3b5a5233 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -15,7 +15,7 @@ IF ERRORLEVEL 1 ( REM no error here, errorlevel == 0 REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT -java -classpath ..\bin duke < input.txt > ACTUAL.TXT +java -classpath ..\bin duke.Duke < input.txt > ACTUAL.TXT REM compare the output to the expected output FC ACTUAL.TXT EXPECTED.TXT diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh index 511030134f..d3aaadd290 100644 --- a/text-ui-test/runtest.sh +++ b/text-ui-test/runtest.sh @@ -13,17 +13,17 @@ then fi # compile the code into the bin folder, terminates if error occurred -if ! javac -cp ../src -Xlint:none -d ../bin ../src/main/java/*.java +if ! javac -cp ../src -Xlint:none -d ../bin ../src/main/java/duke/*.java then echo "********** BUILD FAILURE **********" exit 1 fi # run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT -java -classpath ../bin Duke < input.txt > ACTUAL.TXT +java -classpath ../bin duke/Duke < input.txt > ACTUAL.TXT # compare the output to the expected output -diff ACTUAL.TXT EXPECTED-UNIX.TXT +diff ACTUAL.TXT EXPECTED.TXT if [ $? -eq 0 ] then echo "Test result: PASSED" From 982ca2fc3548476c56f60f43486a35f7620926ea Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 17:38:37 +0800 Subject: [PATCH 14/19] level 7 --- duke.txt | 3 ++ src/main/java/duke/Duke.java | 74 ++++++++++++++++++++++----- src/main/java/duke/task/Deadline.java | 4 ++ src/main/java/duke/task/Event.java | 6 ++- src/main/java/duke/task/Task.java | 4 ++ src/main/java/duke/task/Todo.java | 4 ++ 6 files changed, 81 insertions(+), 14 deletions(-) create mode 100644 duke.txt diff --git a/duke.txt b/duke.txt new file mode 100644 index 0000000000..273fb4c833 --- /dev/null +++ b/duke.txt @@ -0,0 +1,3 @@ +T|false|read book +T|false|return book +T|false|borrow book diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index b6a9712220..2c76698ae5 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -8,11 +8,58 @@ import java.util.Scanner; import java.util.ArrayList; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.FileNotFoundException; + public class Duke { static String horizontalLine = "--------------------------------------------------"; static int thingsCounted = 0; //static Task[] tasks = new Task[100]; public static ArrayList taskArray = new ArrayList<>(); + public static final String FILE_PATH = "duke.txt"; + + public static void writeToFile(String FILE_PATH){ + try { + File f = new File(FILE_PATH); + FileWriter fw = new FileWriter(FILE_PATH); + for(Task task: taskArray){ + fw.write(task.printIntoFile() + "\n"); + } + fw.close(); + } catch (IOException e) { + System.out.println("Error writing file"); + } + } + + public static void readFromFile(String FILE_PATH){ + try { + File f = new File(FILE_PATH); + f.createNewFile(); + Scanner sc = new Scanner(f); + Task task; + while(sc.hasNext()){ + String[] taskInFile = sc.nextLine().split("\\|"); + if(taskInFile[0].equals("T")){ + task = new Todo(taskInFile[2]); + }else if(taskInFile[0].equals("D")){ + task = new Deadline(taskInFile[2],taskInFile[3]); + }else{ + task = new Event(taskInFile[2], taskInFile[3]); + } + thingsCounted++; + if(taskInFile[1].equals("true")){ + task.taskDone(); + } + taskArray.add(task); + } + } catch (FileNotFoundException e) { + System.out.println("Error reading file"); + }catch(IOException e){ + e.printStackTrace(); + } + } public static void storeTextAndList() throws DukeException { String command; @@ -56,19 +103,18 @@ public static void storeTextAndList() throws DukeException { } public static void dealWithException(String text){ - switch (text) { - case "todo": - System.out.println("☹ OOPS!!! The description of a todo cannot be empty."); - break; - case "deadline": - System.out.println("☹ OOPS!!! The description of a deadline cannot be empty."); - break; - case "event": - System.out.println("☹ OOPS!!! The description of a event cannot be empty."); - break; - default: - System.out.println(("☹ OOPS!!! I'm sorry, but I don't know what that means :-(")); - break; + if (text.equals("todo")) { + System.out.println("☹ OOPS!!! The description of a todo cannot be empty."); + } else if (text.equals("deadline")) { + System.out.println("☹ OOPS!!! The description of a deadline cannot be empty."); + } else if (text.equals("event")) { + System.out.println("☹ OOPS!!! The description of a event cannot be empty."); + } else if(text.contains("done")){ + System.out.println("☹ OOPS!!! The index is out of bound"); + } else if(text.contains("delete")){ + System.out.println("☹ OOPS!!! The index is out of bound"); + } else { + System.out.println(("☹ OOPS!!! I'm sorry, but I don't know what that means :-(")); } } @@ -152,7 +198,9 @@ public static void listTask(){ } public static void main(String[] args) throws DukeException { + readFromFile(FILE_PATH); System.out.println(horizontalLine + "\nHello! I'm Duke\n" + "What can I do for you?\n" + horizontalLine); storeTextAndList(); + writeToFile(FILE_PATH); } } \ No newline at end of file diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java index d5a7c84ed4..190211cef5 100644 --- a/src/main/java/duke/task/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -16,4 +16,8 @@ public String getTypeIcon(){ public String toString(){ return this.getTypeIcon() + this.getStatusIcon() + description + " (by: " + byDate + ")"; } + + public String printIntoFile(){ + return "D|" + isDone + "|" + description + "|" + this.byDate; + } } diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java index 882bffa9a5..b7e3723f74 100644 --- a/src/main/java/duke/task/Event.java +++ b/src/main/java/duke/task/Event.java @@ -12,7 +12,11 @@ public String getTypeIcon(){ return "[E]"; } - public String toString(){ + public String toString() { return this.getTypeIcon() + this.getStatusIcon() + description + " (at: " + atDate + ")"; } + + public String printIntoFile(){ + return "E|" + isDone + "|" + description + "|" + this.atDate; + } } diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index 96f37f5916..5b76bf0577 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -24,4 +24,8 @@ public void taskDone(){ public String toString(){ return this.getStatusIcon() + description; } + + public String printIntoFile(){ + return "Task|" + isDone + "|" + description + "|"; + } } diff --git a/src/main/java/duke/task/Todo.java b/src/main/java/duke/task/Todo.java index 0176ab6def..fd3e2b8786 100644 --- a/src/main/java/duke/task/Todo.java +++ b/src/main/java/duke/task/Todo.java @@ -13,4 +13,8 @@ public String getTypeIcon(){ public String toString(){ return this.getTypeIcon() + this.getStatusIcon() + description; } + + public String printIntoFile(){ + return "T|" + isDone + "|" + description; + } } From 1fbc4e380cabc69a0ef3e66ce06bcbfdb7805a98 Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 17:57:05 +0800 Subject: [PATCH 15/19] Add increment: A-Jar --- src/main/java/META-INF/MANIFEST.MF | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/main/java/META-INF/MANIFEST.MF diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..2c9a9745c5 --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: duke.Duke + From a9ad87faae34c04a6dd2fa8a29474d017bf62fa1 Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 18:59:59 +0800 Subject: [PATCH 16/19] use more OOP --- src/main/java/duke/Duke.java | 210 +++---------------------------- src/main/java/duke/Parser.java | 33 +++++ src/main/java/duke/Storage.java | 64 ++++++++++ src/main/java/duke/TaskList.java | 102 +++++++++++++++ src/main/java/duke/Ui.java | 91 ++++++++++++++ 5 files changed, 307 insertions(+), 193 deletions(-) create mode 100644 src/main/java/duke/Parser.java create mode 100644 src/main/java/duke/Storage.java create mode 100644 src/main/java/duke/TaskList.java create mode 100644 src/main/java/duke/Ui.java diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 2c76698ae5..a203599c9c 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -1,206 +1,30 @@ package duke; -import duke.task.Deadline; -import duke.task.Event; -import duke.task.Task; -import duke.task.Todo; - -import java.util.Scanner; -import java.util.ArrayList; - -import java.io.File; -import java.io.FileWriter; import java.io.IOException; -import java.io.FileNotFoundException; public class Duke { - static String horizontalLine = "--------------------------------------------------"; + private static Storage storage; + private static TaskList tasks; + private static Ui ui; + private static final String FILE_PATH="duke.txt"; static int thingsCounted = 0; - //static Task[] tasks = new Task[100]; - public static ArrayList taskArray = new ArrayList<>(); - public static final String FILE_PATH = "duke.txt"; - - public static void writeToFile(String FILE_PATH){ - try { - File f = new File(FILE_PATH); - FileWriter fw = new FileWriter(FILE_PATH); - for(Task task: taskArray){ - fw.write(task.printIntoFile() + "\n"); - } - fw.close(); - } catch (IOException e) { - System.out.println("Error writing file"); - } - } - - public static void readFromFile(String FILE_PATH){ - try { - File f = new File(FILE_PATH); - f.createNewFile(); - Scanner sc = new Scanner(f); - Task task; - while(sc.hasNext()){ - String[] taskInFile = sc.nextLine().split("\\|"); - if(taskInFile[0].equals("T")){ - task = new Todo(taskInFile[2]); - }else if(taskInFile[0].equals("D")){ - task = new Deadline(taskInFile[2],taskInFile[3]); - }else{ - task = new Event(taskInFile[2], taskInFile[3]); - } - thingsCounted++; - if(taskInFile[1].equals("true")){ - task.taskDone(); - } - taskArray.add(task); - } - } catch (FileNotFoundException e) { - System.out.println("Error reading file"); - }catch(IOException e){ - e.printStackTrace(); - } - } - - public static void storeTextAndList() throws DukeException { - String command; - Scanner in = new Scanner(System.in); - command = in.nextLine(); - while (!command.equals("bye")) { - System.out.println(horizontalLine); - try { - if (command.equals("list")) { - listTask(); - } else if (command.contains("done")) { - int index = Integer.parseInt(command.substring(5)); - if(index > thingsCounted){ - throw new DukeException(); - } - markTaskAsDone(index); - } else if (command.contains("todo")) { - addTodoTask(command); - } else if (command.contains("deadline")) { - addDeadlineTask(command); - } else if (command.contains("event")) { - addEventTask(command); - } else if (command.contains("delete")){ - int index = Integer.parseInt(command.substring(7)); - if(index > thingsCounted){ - throw new DukeException(); - } - deleteItem(index); - } else { - throw new DukeException(); - } - }catch (DukeException e) { - dealWithException(command); - } - System.out.println(horizontalLine); - command = in.nextLine(); - } - System.out.println(horizontalLine); - System.out.println("Bye. Hope to see you again soon"); - System.out.println(horizontalLine); - } - - public static void dealWithException(String text){ - if (text.equals("todo")) { - System.out.println("☹ OOPS!!! The description of a todo cannot be empty."); - } else if (text.equals("deadline")) { - System.out.println("☹ OOPS!!! The description of a deadline cannot be empty."); - } else if (text.equals("event")) { - System.out.println("☹ OOPS!!! The description of a event cannot be empty."); - } else if(text.contains("done")){ - System.out.println("☹ OOPS!!! The index is out of bound"); - } else if(text.contains("delete")){ - System.out.println("☹ OOPS!!! The index is out of bound"); - } else { - System.out.println(("☹ OOPS!!! I'm sorry, but I don't know what that means :-(")); - } - } - - public static void addTodoTask(String text) throws DukeException { - String todoDescription; - if(text.equals("todo")){ - throw new DukeException(); - } - todoDescription = text.substring(5); - Task task = new Todo(todoDescription); - //tasks[thingsCounted] = task; - thingsCounted++; - taskArray.add(task); - printTask(task); - } - - public static void addDeadlineTask (String text) throws DukeException { - String deadlineDescription; - String deadlineByDate; - int getIndex; - if(text.equals("deadline")){ - throw new DukeException(); - } - getIndex = text.indexOf("/"); - deadlineDescription = text.substring(9, getIndex - 1); - deadlineByDate = text.substring(getIndex + 4); - Task task = new Deadline(deadlineDescription, deadlineByDate); - //tasks[thingsCounted] = task; - thingsCounted++; - taskArray.add(task); - printTask(task); - } - - public static void addEventTask(String text) throws DukeException { - String eventDescription; - String eventAtDate; - int getIndex; - if(text.equals("event")){ - throw new DukeException(); - } - getIndex = text.indexOf("/"); - eventDescription = text.substring(6, getIndex - 1); - eventAtDate = text.substring(getIndex + 4); - Task task = new Event(eventDescription, eventAtDate); - //tasks[thingsCounted] = task; - thingsCounted++; - taskArray.add(task); - printTask(task); - } - - public static void printTask(Task task){ - System.out.println("Got it. I've added this task: "); - System.out.println(task); - System.out.println("Now you have " + thingsCounted + " tasks in the list."); - } - - - public static void markTaskAsDone(int index){ - taskArray.get(index-1).taskDone(); - System.out.println("Nice! I've marked this task as done:\n" +taskArray.get(index-1)); - } - private static void deleteItem(int index) { - Task task = taskArray.remove(index - 1); - System.out.println("Noted. I've removed this task: "); - System.out.println(task); - thingsCounted--; - System.out.println("Now you have " + thingsCounted + " tasks in the list."); + public Duke(String filePath) throws IOException { + ui = new Ui(); + storage = new Storage(filePath); + tasks = new TaskList(); } - public static void listTask(){ - System.out.println(horizontalLine); - System.out.println("Here are the tasks in your list:"); - int count = 1; - for(Task task : taskArray){ - System.out.print(count + ". "); - System.out.println(task); - count++; - } - System.out.println(horizontalLine); + public void run() throws DukeException { + thingsCounted = storage.readFromFile(tasks); + ui.start(); + ui.getCount(thingsCounted); + ui.interact(tasks); + ui.bye(); + storage.writeToFile(tasks); } - public static void main(String[] args) throws DukeException { - readFromFile(FILE_PATH); - System.out.println(horizontalLine + "\nHello! I'm Duke\n" + "What can I do for you?\n" + horizontalLine); - storeTextAndList(); - writeToFile(FILE_PATH); + public static void main(String[] args) throws DukeException,IOException { + new Duke(FILE_PATH).run(); } } \ No newline at end of file diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java new file mode 100644 index 0000000000..cf03042e75 --- /dev/null +++ b/src/main/java/duke/Parser.java @@ -0,0 +1,33 @@ +package duke; + +public class Parser { + public static String getCommand(String command) throws DukeException{ + try{ + if (command.equals("list")) { + return "list"; + } else if (command.equals("bye")) { + return "bye"; + } else if ( command.equals("todo") || command.equals("deadline") + || command.equals("event") || command.equals("done") + || command.equals("delete")) { + throw new DukeException(); + } else if (command.contains("todo")) { + return "todo"; + } else if (command.contains("event")) { + return "event"; + } else if (command.contains("deadline")) { + return "deadline"; + } else if (command.contains("delete")) { + return "delete"; + } else if (command.contains("done")) { + return "done"; + } + else { + throw new DukeException(); + } + } catch (DukeException e) { + Ui.dealWithException(command); + return "fail"; + } + } +} diff --git a/src/main/java/duke/Storage.java b/src/main/java/duke/Storage.java new file mode 100644 index 0000000000..b449ecd5d2 --- /dev/null +++ b/src/main/java/duke/Storage.java @@ -0,0 +1,64 @@ +package duke; + +import duke.task.Deadline; +import duke.task.Event; +import duke.task.Task; +import duke.task.Todo; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Scanner; + +public class Storage { + public static ArrayList taskArrayList; + private static File f; + private static String filePath; + public static int fileTasksCounted = 0; + + public static void writeToFile(TaskList tasks){ + try { + FileWriter fw = new FileWriter(filePath); + taskArrayList = tasks.getTasksList(); + for(Task task: taskArrayList) { + fw.write(task.printIntoFile() + "\n"); + } + fw.close(); + } catch (IOException e) { + System.out.println("Error writing file"); + } + } + + public static int readFromFile(TaskList tasks){ + try { + Scanner sc = new Scanner(f); + Task task; + while(sc.hasNext()){ + String[] taskInFile = sc.nextLine().split("\\|"); + if(taskInFile[0].equals("T")){ + task = new Todo(taskInFile[2]); + }else if(taskInFile[0].equals("D")){ + task = new Deadline(taskInFile[2],taskInFile[3]); + }else{ + task = new Event(taskInFile[2], taskInFile[3]); + } + fileTasksCounted++; + if(taskInFile[1].equals("true")){ + task.taskDone(); + } + tasks.add(task); + } + } catch (FileNotFoundException e) { + System.out.println("Error reading file"); + } + return fileTasksCounted; + } + + public Storage(String filePath) throws IOException { + f = new File(filePath); + f.createNewFile(); + this.filePath=filePath; + } +} \ No newline at end of file diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java new file mode 100644 index 0000000000..833757b854 --- /dev/null +++ b/src/main/java/duke/TaskList.java @@ -0,0 +1,102 @@ +package duke; + +import duke.task.Deadline; +import duke.task.Event; +import duke.task.Task; +import duke.task.Todo; + +import java.util.ArrayList; + +public class TaskList { + public static ArrayList tasksList; + + public TaskList(){ + this.tasksList = new ArrayList<>(); + } + + public TaskList(ArrayList tasksList){ + this.tasksList = tasksList; + } + + public void add(Task task){ + tasksList.add(task); + } + + public Task remove(int index){ + Task removeTask = tasksList.remove(index); + return removeTask; + } + + public Task get(int index){ + Task getTask=tasksList.get(index); + return getTask; + } + + public ArrayList getTasksList(){ + return tasksList; + } + + public static void listTasks() { + int count = 1; + for(Task task : tasksList){ + System.out.print(count + ". "); + System.out.println(task); + count++; + } + } + + public static void addTodoTask(String command) throws DukeException{ + String todoDescription; + todoDescription = command.substring(5); + Task task = new Todo(todoDescription); + tasksList.add(task); + Ui.printTask(task); + } + + public static void addDeadlineTask(String command) throws DukeException{ + String deadlineDescription; + String deadlineByDate; + int getIndex; + getIndex = command.indexOf("/"); + deadlineDescription = command.substring(9,getIndex-1); + deadlineByDate = command.substring(getIndex+4); + Task task = new Deadline(deadlineDescription, deadlineByDate); + //tasks[countThings] = task; + tasksList.add(task); + Ui.printTask(task); + + } + + public static void addEventTask(String command) throws DukeException{ + String eventDescription; + String eventDate; + int getIndex; + getIndex = command.indexOf("/"); + eventDescription = command.substring(6,getIndex-1); + eventDate = command.substring(getIndex+4); + Task task = new Event(eventDescription, eventDate); + tasksList.add(task); + Ui.printTask(task); + } + + public static void markTaskAsDone(String command, int countTasks) throws DukeException{ + int index = Integer.parseInt(command.substring(5)); + if(index > countTasks){ + throw new DukeException(); + } + tasksList.get(index-1).taskDone(); + System.out.println("Nice! I've marked this task as done:\n" + tasksList.get(index-1)); + } + + public static void delete(String command, int tasksCounted) throws DukeException { + int index = Integer.parseInt(command.substring(7)); + if(index > tasksCounted){ + throw new DukeException(); + } + Task task = tasksList.remove(index - 1); + tasksCounted--; + System.out.println("Noted. I've removed this task: "); + System.out.println(task); + System.out.println("Now you have " + tasksCounted + " tasks in the list."); + } +} \ No newline at end of file diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java new file mode 100644 index 0000000000..d494969778 --- /dev/null +++ b/src/main/java/duke/Ui.java @@ -0,0 +1,91 @@ +package duke; + +import duke.task.Task; + +import java.util.Scanner; + +public class Ui { + public Parser parser; + public static TaskList tasks = new TaskList(); + public static int tasksCounted = 0; + + public void getCount(int thingsCounted){ + this.tasksCounted =thingsCounted; + } + + public void interact(TaskList tasks) throws DukeException{ + String input; + Scanner in = new Scanner(System.in); + while(in.hasNextLine()){ + input = in.nextLine(); + Ui.printLine(); + String command = parser.getCommand(input); + switch (command) { + case "list": + tasks.listTasks(); + break; + case "done": + tasks.markTaskAsDone(command, tasksCounted); + break; + case "todo": + tasksCounted++; + tasks.addTodoTask(command); + break; + case "deadline": + tasksCounted++; + tasks.addDeadlineTask(command); + break; + case "event": + tasksCounted++; + tasks.addEventTask(command); + break; + case "delete": + tasks.delete(command, tasksCounted); + break; + case "bye": + return; + } + Ui.printLine(); + } + } + + public static void printTask(Task task){ + System.out.println("Got it. I've added this task:"); + System.out.println(task); + System.out.println("Now you have " + tasksCounted + " tasks in the list."); + } + + public static void dealWithException(String inputLine){ + if(inputLine.equals("todo")){ + System.out.println("☹ OOPS!!! The description of a todo cannot be empty."); + }else if(inputLine.equals("deadline")){ + System.out.println("☹ OOPS!!! The description of a deadline cannot be empty."); + }else if(inputLine.equals("event")) { + System.out.println("☹ OOPS!!! The description of a event cannot be empty."); + }else if(inputLine.contains("done")) { + System.out.println("☹ OOPS!!! The done index is out of bound."); + }else if(inputLine.contains("delete")) { + System.out.println("☹ OOPS!!! The delete index is out of bound."); + }else{ + System.out.println(("☹ OOPS!!! I'm sorry, but I don't know what that means :-(")); + } + } + + public static void bye(){ + System.out.println("Bye. Hope to see you again soon"); + printLine(); + } + + public static void printLine(){ + System.out.println("____________________________________________________________"); + } + + public static void start(){ + String startGreet = "____________________________________________________________\n" + + " Hello! I'm Duke\n" + + " What can I do for you?\n" + + "____________________________________________________________\n"; + + System.out.println(startGreet); + } +} \ No newline at end of file From 3cefc62022ea72516ac12059f5dc147cf4ad8df3 Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 19:33:08 +0800 Subject: [PATCH 17/19] improve code quality --- src/main/java/duke/Duke.java | 10 +++++----- src/main/java/duke/Parser.java | 2 +- src/main/java/duke/TaskList.java | 21 ++++++++++----------- src/main/java/duke/Ui.java | 7 +++---- text-ui-test/EXPECTED.TXT | 2 +- 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index a203599c9c..9c8796fc8f 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -7,7 +7,7 @@ public class Duke { private static TaskList tasks; private static Ui ui; private static final String FILE_PATH="duke.txt"; - static int thingsCounted = 0; + public static int thingsCounted = 0; public Duke(String filePath) throws IOException { ui = new Ui(); @@ -18,13 +18,13 @@ public Duke(String filePath) throws IOException { public void run() throws DukeException { thingsCounted = storage.readFromFile(tasks); ui.start(); - ui.getCount(thingsCounted); - ui.interact(tasks); - ui.bye(); + ui.count(thingsCounted); + ui.doTasks(tasks); + ui.end(); storage.writeToFile(tasks); } - public static void main(String[] args) throws DukeException,IOException { + public static void main(String[] args) throws DukeException, IOException { new Duke(FILE_PATH).run(); } } \ No newline at end of file diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index cf03042e75..2b89e9558b 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -1,7 +1,7 @@ package duke; public class Parser { - public static String getCommand(String command) throws DukeException{ + public static String getCommand(String command) throws DukeException { try{ if (command.equals("list")) { return "list"; diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java index 833757b854..37fa0c9850 100644 --- a/src/main/java/duke/TaskList.java +++ b/src/main/java/duke/TaskList.java @@ -55,13 +55,12 @@ public static void addTodoTask(String command) throws DukeException{ public static void addDeadlineTask(String command) throws DukeException{ String deadlineDescription; - String deadlineByDate; - int getIndex; - getIndex = command.indexOf("/"); - deadlineDescription = command.substring(9,getIndex-1); - deadlineByDate = command.substring(getIndex+4); - Task task = new Deadline(deadlineDescription, deadlineByDate); - //tasks[countThings] = task; + String deadlineDate; + int index; + index = command.indexOf("/"); + deadlineDescription = command.substring(9,index-1); + deadlineDate = command.substring(index+4); + Task task = new Deadline(deadlineDescription, deadlineDate); tasksList.add(task); Ui.printTask(task); @@ -70,10 +69,10 @@ public static void addDeadlineTask(String command) throws DukeException{ public static void addEventTask(String command) throws DukeException{ String eventDescription; String eventDate; - int getIndex; - getIndex = command.indexOf("/"); - eventDescription = command.substring(6,getIndex-1); - eventDate = command.substring(getIndex+4); + int index; + index = command.indexOf("/"); + eventDescription = command.substring(6,index-1); + eventDate = command.substring(index+4); Task task = new Event(eventDescription, eventDate); tasksList.add(task); Ui.printTask(task); diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java index d494969778..6f2effcb89 100644 --- a/src/main/java/duke/Ui.java +++ b/src/main/java/duke/Ui.java @@ -6,14 +6,13 @@ public class Ui { public Parser parser; - public static TaskList tasks = new TaskList(); public static int tasksCounted = 0; - public void getCount(int thingsCounted){ + public void count(int thingsCounted){ this.tasksCounted =thingsCounted; } - public void interact(TaskList tasks) throws DukeException{ + public void doTasks(TaskList tasks) throws DukeException{ String input; Scanner in = new Scanner(System.in); while(in.hasNextLine()){ @@ -71,7 +70,7 @@ public static void dealWithException(String inputLine){ } } - public static void bye(){ + public static void end(){ System.out.println("Bye. Hope to see you again soon"); printLine(); } diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index eeef2799e6..64156e390e 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -24,7 +24,7 @@ ____________________________________________________________ ____________________________________________________________ 1. [T][✘]borrow book 2. [D][✘]return book (by: Sunday) -3. [D][✘]project (at: Mon 2-4pm) +3. [E][✘]project (at: Mon 2-4pm) ____________________________________________________________ ____________________________________________________________ Nice! I've marked this task as done: From b997ae66074f0e23b633e53771a71fe309639c8c Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 19:44:33 +0800 Subject: [PATCH 18/19] level 8 --- src/main/java/duke/Parser.java | 15 +++++++++++++++ src/main/java/duke/task/Deadline.java | 4 ++++ src/main/java/duke/task/Event.java | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index 2b89e9558b..25861e78ba 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -1,5 +1,8 @@ package duke; +import java.time.format.DateTimeFormatter; +import java.time.LocalDate; + public class Parser { public static String getCommand(String command) throws DukeException { try{ @@ -30,4 +33,16 @@ public static String getCommand(String command) throws DukeException { return "fail"; } } + + public static String getDateFormat(String datetime) { + LocalDate date; + String dateForm; + try { + date = LocalDate.parse(datetime); + dateForm = date.format(DateTimeFormatter.ofPattern("MMM dd yyyy")); + } catch (Exception e) { + dateForm = datetime; + } + return dateForm; + } } diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java index 190211cef5..2ed94e0fc9 100644 --- a/src/main/java/duke/task/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -1,11 +1,15 @@ package duke.task; +import duke.Parser; + public class Deadline extends Task { protected String byDate; + protected Parser parser; public Deadline(String description, String byDate) { super(description); + byDate = parser.getDateFormat(byDate); this.byDate=byDate; } diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java index b7e3723f74..506308072a 100644 --- a/src/main/java/duke/task/Event.java +++ b/src/main/java/duke/task/Event.java @@ -1,10 +1,14 @@ package duke.task; +import duke.Parser; + public class Event extends Task{ protected String atDate; + protected Parser parser; public Event(String description, String atDate) { super(description); + atDate = parser.getDateFormat(atDate); this.atDate=atDate; } From 413bb1ebd45f11994e6ce37247951dd4bbec6bc0 Mon Sep 17 00:00:00 2001 From: JinYixuan-Au <506317808@qq.com> Date: Fri, 2 Oct 2020 20:12:32 +0800 Subject: [PATCH 19/19] level 9 --- src/main/java/duke/Parser.java | 7 ++++--- src/main/java/duke/TaskList.java | 24 +++++++++++++++++++++--- src/main/java/duke/Ui.java | 3 +++ src/main/java/duke/task/Task.java | 3 +++ 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index 25861e78ba..8dc55e7e7d 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -4,7 +4,7 @@ import java.time.LocalDate; public class Parser { - public static String getCommand(String command) throws DukeException { + public static String getCommand(String command) { try{ if (command.equals("list")) { return "list"; @@ -24,8 +24,9 @@ public static String getCommand(String command) throws DukeException { return "delete"; } else if (command.contains("done")) { return "done"; - } - else { + } else if (command.contains("find")) { + return "find"; + } else { throw new DukeException(); } } catch (DukeException e) { diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java index 37fa0c9850..891f8b54ad 100644 --- a/src/main/java/duke/TaskList.java +++ b/src/main/java/duke/TaskList.java @@ -6,6 +6,7 @@ import duke.task.Todo; import java.util.ArrayList; +import static java.util.stream.Collectors.toList; public class TaskList { public static ArrayList tasksList; @@ -45,9 +46,26 @@ public static void listTasks() { } } + public static void findTasks(String command) { + String findText = command.substring(4); + ArrayList findTasks = (ArrayList) tasksList.stream() + .filter((t) -> t.getDescription().contains(findText)) + .collect(toList()); + System.out.println("Here are the matching tasks in your list:"); + int count = 1; + for(Task task : findTasks){ + System.out.print(count + ". "); + System.out.println(task); + count++; + } + if(count==1){ + System.out.println("no matching result"); + } + } + public static void addTodoTask(String command) throws DukeException{ String todoDescription; - todoDescription = command.substring(5); + todoDescription = command.substring(4); Task task = new Todo(todoDescription); tasksList.add(task); Ui.printTask(task); @@ -79,7 +97,7 @@ public static void addEventTask(String command) throws DukeException{ } public static void markTaskAsDone(String command, int countTasks) throws DukeException{ - int index = Integer.parseInt(command.substring(5)); + int index = Integer.parseInt(command.substring(4)); if(index > countTasks){ throw new DukeException(); } @@ -88,7 +106,7 @@ public static void markTaskAsDone(String command, int countTasks) throws DukeExc } public static void delete(String command, int tasksCounted) throws DukeException { - int index = Integer.parseInt(command.substring(7)); + int index = Integer.parseInt(command.substring(6)); if(index > tasksCounted){ throw new DukeException(); } diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java index 6f2effcb89..fb675c155a 100644 --- a/src/main/java/duke/Ui.java +++ b/src/main/java/duke/Ui.java @@ -41,6 +41,9 @@ public void doTasks(TaskList tasks) throws DukeException{ case "delete": tasks.delete(command, tasksCounted); break; + case "find": + tasks.findTasks(command); + break; case "bye": return; } diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index 5b76bf0577..a87ec23f20 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -13,6 +13,9 @@ public void setDescription(String description) { this.description = description; } + public String getDescription(){ + return description; + } public String getStatusIcon() { return (isDone ? "[\u2713]" : "[\u2718]"); //return tick or X symbols }