From 9f810e68b573566df2a9b0e67239cdd49418ac94 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Sat, 28 Jan 2023 13:23:05 +0800 Subject: [PATCH 01/13] Level 0. Greet --- src/main/java/Duke.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d313334c..c6c94b4e9 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -6,5 +6,6 @@ public static void main(String[] args) { + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); + System.out.println("Hi! My name is Duke. \n Nice to meet you!"); } } From dccfb91acfb956535dfc2fc6fe551a29dfbaf354 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Wed, 8 Feb 2023 16:23:30 +0800 Subject: [PATCH 02/13] level 1: greet, echo, exit --- src/main/java/Duke.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index c6c94b4e9..518edb9d0 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,4 +1,17 @@ +import java.util.Scanner; +import java.util.Arrays; public class Duke { + + public static void echo(String line) { + String exitCommand = "bye"; + while (!line.equals(exitCommand)) { + System.out.println(line); + Scanner in = new Scanner(System.in); + line = in.nextLine(); + } + System.out.println("Bye! Hope to see you again"); + } + public static void main(String[] args) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -7,5 +20,10 @@ public static void main(String[] args) { + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); System.out.println("Hi! My name is Duke. \n Nice to meet you!"); + + String line; + Scanner in = new Scanner(System.in); + line = in.nextLine(); + echo(line); } } From a5f952e46a288b2ab8e89412a17db19ab858cd34 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Wed, 8 Feb 2023 17:31:04 +0800 Subject: [PATCH 03/13] Level 2: Add, list --- src/main/java/Duke.java | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 518edb9d0..c7f9f8429 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -2,16 +2,33 @@ import java.util.Arrays; public class Duke { - public static void echo(String line) { + public static void command(String line) { String exitCommand = "bye"; + String toDo = "list"; + String[] toDoList = new String[100]; + int numberOfItems = 0; + while (!line.equals(exitCommand)) { - System.out.println(line); - Scanner in = new Scanner(System.in); - line = in.nextLine(); + if (line.equals(toDo)) { + for (int i = 0; i < numberOfItems; ++i) { + System.out.format("%d. ", (i + 1)); + System.out.println(toDoList[i]); + } + Scanner in = new Scanner(System.in); + line = in.nextLine(); + } else { + toDoList[numberOfItems] = line; + ++numberOfItems; + + System.out.println("added: " + line); + + Scanner in = new Scanner(System.in); + line = in.nextLine(); + } } System.out.println("Bye! Hope to see you again"); } - + public static void main(String[] args) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -24,6 +41,6 @@ public static void main(String[] args) { String line; Scanner in = new Scanner(System.in); line = in.nextLine(); - echo(line); + command(line); } } From a60298c51dd3fc983e7f99e8241b831ade5f1ce2 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Thu, 9 Feb 2023 13:04:35 +0800 Subject: [PATCH 04/13] Level 3: Mark as done --- src/main/java/Duke.java | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index c7f9f8429..d8f525a76 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -2,27 +2,41 @@ import java.util.Arrays; public class Duke { + private static Scanner in = new Scanner(System.in); + public static String getStatus(int itemNumber, Boolean[] isDone) { + if (isDone[itemNumber] == true) { + return "[X]"; + } else { + return "[ ]"; + } + } + public static void command(String line) { String exitCommand = "bye"; String toDo = "list"; + String checkDone = "mark"; String[] toDoList = new String[100]; + Boolean[] isDone = new Boolean[100]; int numberOfItems = 0; while (!line.equals(exitCommand)) { if (line.equals(toDo)) { + System.out.println("Here are your list of tasks to complete!"); for (int i = 0; i < numberOfItems; ++i) { System.out.format("%d. ", (i + 1)); - System.out.println(toDoList[i]); + String status = getStatus(i, isDone); + System.out.println(status + " " + toDoList[i]); } - Scanner in = new Scanner(System.in); + line = in.nextLine(); + } else if (line.equals(checkDone)){ + System.out.println("check done"); line = in.nextLine(); } else { toDoList[numberOfItems] = line; + isDone[numberOfItems] = false; ++numberOfItems; System.out.println("added: " + line); - - Scanner in = new Scanner(System.in); line = in.nextLine(); } } @@ -39,7 +53,6 @@ public static void main(String[] args) { System.out.println("Hi! My name is Duke. \n Nice to meet you!"); String line; - Scanner in = new Scanner(System.in); line = in.nextLine(); command(line); } From 3262052c4571e7b1e9c005cd7fe7f83e9af2ca9e Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Sat, 11 Feb 2023 10:15:23 +0800 Subject: [PATCH 05/13] Level 3(revised) --- src/main/java/Duke.java | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d8f525a76..36e245b0c 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -3,6 +3,7 @@ public class Duke { private static Scanner in = new Scanner(System.in); + public static String getStatus(int itemNumber, Boolean[] isDone) { if (isDone[itemNumber] == true) { return "[X]"; @@ -14,13 +15,17 @@ public static String getStatus(int itemNumber, Boolean[] isDone) { public static void command(String line) { String exitCommand = "bye"; String toDo = "list"; - String checkDone = "mark"; + String checkOff = "mark"; + String[] toDoList = new String[100]; Boolean[] isDone = new Boolean[100]; int numberOfItems = 0; - while (!line.equals(exitCommand)) { - if (line.equals(toDo)) { + String[] tokens = line.split(" ", 0); + String command = tokens[0]; + + while (!command.equals(exitCommand)) { + if (tokens[0].equals(toDo)) { System.out.println("Here are your list of tasks to complete!"); for (int i = 0; i < numberOfItems; ++i) { System.out.format("%d. ", (i + 1)); @@ -28,9 +33,22 @@ public static void command(String line) { System.out.println(status + " " + toDoList[i]); } line = in.nextLine(); - } else if (line.equals(checkDone)){ - System.out.println("check done"); + tokens = line.split(" ", 0); + command = tokens[0]; + } else if (command.equals(checkOff)){ + int checkDone = Integer.parseInt(tokens[1]) - 1; + isDone[checkDone] = true; + System.out.println("Alright! I have marked the task as complete!"); + + for (int i = 0; i < numberOfItems; ++i) { + System.out.format("%d. ", (i + 1)); + String status = getStatus(i, isDone); + System.out.println(status + " " + toDoList[i]); + } + line = in.nextLine(); + tokens = line.split(" ", 0); + command = tokens[0]; } else { toDoList[numberOfItems] = line; isDone[numberOfItems] = false; @@ -38,6 +56,8 @@ public static void command(String line) { System.out.println("added: " + line); line = in.nextLine(); + tokens = line.split(" ", 0); + command = tokens[0]; } } System.out.println("Bye! Hope to see you again"); From 72c59cebc6cf70bc17a929a473bac322475691ba Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Wed, 15 Feb 2023 10:15:12 +0800 Subject: [PATCH 06/13] Level 4:Added Todo, Deadline and Event class --- src/main/java/Deadline.java | 2 ++ src/main/java/Event.java | 2 ++ src/main/java/Task.java | 2 ++ src/main/java/ToDo.java | 2 ++ 4 files changed, 8 insertions(+) create mode 100644 src/main/java/Deadline.java create mode 100644 src/main/java/Event.java create mode 100644 src/main/java/Task.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 000000000..623a1f49d --- /dev/null +++ b/src/main/java/Deadline.java @@ -0,0 +1,2 @@ +package PACKAGE_NAME;public class Deadline { +} diff --git a/src/main/java/Event.java b/src/main/java/Event.java new file mode 100644 index 000000000..fe6147652 --- /dev/null +++ b/src/main/java/Event.java @@ -0,0 +1,2 @@ +package PACKAGE_NAME;public class Event { +} diff --git a/src/main/java/Task.java b/src/main/java/Task.java new file mode 100644 index 000000000..4ec445449 --- /dev/null +++ b/src/main/java/Task.java @@ -0,0 +1,2 @@ +package PACKAGE_NAME;public class Task { +} diff --git a/src/main/java/ToDo.java b/src/main/java/ToDo.java new file mode 100644 index 000000000..bb01176ba --- /dev/null +++ b/src/main/java/ToDo.java @@ -0,0 +1,2 @@ +package PACKAGE_NAME;public class ToDo { +} From 3242102ee5c2fb58690ecd14e132d1a52951707c Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Wed, 15 Feb 2023 10:15:52 +0800 Subject: [PATCH 07/13] Level 4: Added Todo, Event and Deadline classes --- src/main/java/Deadline.java | 13 ++++++- src/main/java/Duke.java | 73 ++++++++++++++++++++++++------------- src/main/java/Event.java | 15 +++++++- src/main/java/Task.java | 21 ++++++++++- src/main/java/ToDo.java | 11 +++++- 5 files changed, 103 insertions(+), 30 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index 623a1f49d..5ac06844b 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -1,2 +1,13 @@ -package PACKAGE_NAME;public class Deadline { +public class Deadline extends Task{ + protected String dueDate; + + public Deadline(String description, String dueBy) { + super(description); + this.dueDate = dueBy; + } + + @Override + public String toString() { + return "[D]" + super.toString() + " (due by: " + dueDate + ")"; + } } diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 36e245b0c..df7e57077 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -3,56 +3,77 @@ public class Duke { private static Scanner in = new Scanner(System.in); - - public static String getStatus(int itemNumber, Boolean[] isDone) { - if (isDone[itemNumber] == true) { - return "[X]"; - } else { - return "[ ]"; - } - } + private static final Task[] tasks = new Task[100]; public static void command(String line) { String exitCommand = "bye"; String toDo = "list"; - String checkOff = "mark"; - - String[] toDoList = new String[100]; - Boolean[] isDone = new Boolean[100]; - int numberOfItems = 0; + String checkAsDone = "mark"; + int numberOfTasks = 0; - String[] tokens = line.split(" ", 0); + String[] tokens = line.split(" ", 2); String command = tokens[0]; + String task = tokens[1]; while (!command.equals(exitCommand)) { if (tokens[0].equals(toDo)) { System.out.println("Here are your list of tasks to complete!"); - for (int i = 0; i < numberOfItems; ++i) { + for (int i = 0; i < numberOfTasks; ++i) { System.out.format("%d. ", (i + 1)); - String status = getStatus(i, isDone); - System.out.println(status + " " + toDoList[i]); + String status = tasks[i].getStatus(); + System.out.println(status + " " + tasks[i]); } line = in.nextLine(); tokens = line.split(" ", 0); command = tokens[0]; - } else if (command.equals(checkOff)){ - int checkDone = Integer.parseInt(tokens[1]) - 1; - isDone[checkDone] = true; + } else if (command.equals(checkAsDone)){ + int finishedTask = Integer.parseInt(tokens[1]) - 1; + tasks[finishedTask].markAsDone(); System.out.println("Alright! I have marked the task as complete!"); - for (int i = 0; i < numberOfItems; ++i) { + for (int i = 0; i < numberOfTasks; ++i) { System.out.format("%d. ", (i + 1)); - String status = getStatus(i, isDone); - System.out.println(status + " " + toDoList[i]); + String status = tasks[i].getStatus(); + System.out.println(status + " " + tasks[i]); } line = in.nextLine(); tokens = line.split(" ", 0); command = tokens[0]; } else { - toDoList[numberOfItems] = line; - isDone[numberOfItems] = false; - ++numberOfItems; + switch(command) { + case "todo": + Task t = new ToDo(task); + tasks[numberOfTasks] = t; + tasks[numberOfTasks].isDone = false; + ++numberOfTasks; + case "deadline": + String[] taskDeadline = task.split("/", 2); + String taskDescription = taskDeadline[0]; + String dueBy = taskDeadline[1]; + + Task d = new Deadline(taskDescription, dueBy); + tasks[numberOfTasks] = d; + tasks[numberOfTasks].isDone = false; + ++numberOfTasks; + case "event": + String[] taskEvent = task.split("/", 3); + String eventDescription = taskEvent[0]; + String start = taskEvent[1]; + String end = taskEvent[2]; + + Task e = new Event(eventDescription, start, end); + tasks[numberOfTasks] = e; + tasks[numberOfTasks].isDone = false; + ++numberOfTasks; + default: + System.out.println("Sorry! There seems to be an error:( Please try again."); + } + + Task t = new Task(line); + tasks[numberOfTasks] = t; + tasks[numberOfTasks].isDone = false; + ++numberOfTasks; System.out.println("added: " + line); line = in.nextLine(); diff --git a/src/main/java/Event.java b/src/main/java/Event.java index fe6147652..6622efcf7 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -1,2 +1,15 @@ -package PACKAGE_NAME;public class Event { +public class Event extends Task{ + protected String start; + protected String end; + + public Event(String description, String start, String end) { + super(description); + this.start = start; + this.end = end; + } + + @Override + public String toString() { + return "[E]" + super.toString() + " (from: " + start + " to " + end + ")"; + } } diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 4ec445449..36f11c7fd 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,2 +1,21 @@ -package PACKAGE_NAME;public class Task { +public class Task { + protected String description; + protected boolean isDone; + + public Task(String description) { + this.description = description; + this.isDone = false; + } + + public String getStatus() { + return (isDone ? "[X]" : "[ ]"); // mark done task with X + } + + public void markAsDone() { + this.isDone = true; + } + + public String toString() { + return getStatus() + " " + description; + } } diff --git a/src/main/java/ToDo.java b/src/main/java/ToDo.java index bb01176ba..38788ba66 100644 --- a/src/main/java/ToDo.java +++ b/src/main/java/ToDo.java @@ -1,2 +1,11 @@ -package PACKAGE_NAME;public class ToDo { +public class ToDo extends Task { + + public ToDo(String description) { + super(description); + } + + @Override + public String toString() { + return "[T]" + super.toString(); + } } From 2fbc568f35ec490da55c8eba6ef5a108970900f6 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Wed, 15 Feb 2023 19:20:12 +0800 Subject: [PATCH 08/13] Level 4: Debugged and refined code (removed extra brackets and resolved IndexOutOfBounds error --- src/main/java/Duke.java | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index df7e57077..d70530993 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -13,18 +13,16 @@ public static void command(String line) { String[] tokens = line.split(" ", 2); String command = tokens[0]; - String task = tokens[1]; while (!command.equals(exitCommand)) { if (tokens[0].equals(toDo)) { System.out.println("Here are your list of tasks to complete!"); for (int i = 0; i < numberOfTasks; ++i) { System.out.format("%d. ", (i + 1)); - String status = tasks[i].getStatus(); - System.out.println(status + " " + tasks[i]); + System.out.println(tasks[i]); } line = in.nextLine(); - tokens = line.split(" ", 0); + tokens = line.split(" ", 2); command = tokens[0]; } else if (command.equals(checkAsDone)){ int finishedTask = Integer.parseInt(tokens[1]) - 1; @@ -33,20 +31,21 @@ public static void command(String line) { for (int i = 0; i < numberOfTasks; ++i) { System.out.format("%d. ", (i + 1)); - String status = tasks[i].getStatus(); - System.out.println(status + " " + tasks[i]); + System.out.println(tasks[i]); } line = in.nextLine(); tokens = line.split(" ", 0); command = tokens[0]; } else { + String task = tokens[1]; switch(command) { case "todo": Task t = new ToDo(task); tasks[numberOfTasks] = t; tasks[numberOfTasks].isDone = false; ++numberOfTasks; + break; case "deadline": String[] taskDeadline = task.split("/", 2); String taskDescription = taskDeadline[0]; @@ -56,6 +55,7 @@ public static void command(String line) { tasks[numberOfTasks] = d; tasks[numberOfTasks].isDone = false; ++numberOfTasks; + break; case "event": String[] taskEvent = task.split("/", 3); String eventDescription = taskEvent[0]; @@ -66,15 +66,11 @@ public static void command(String line) { tasks[numberOfTasks] = e; tasks[numberOfTasks].isDone = false; ++numberOfTasks; + break; default: System.out.println("Sorry! There seems to be an error:( Please try again."); + break; } - - Task t = new Task(line); - tasks[numberOfTasks] = t; - tasks[numberOfTasks].isDone = false; - ++numberOfTasks; - System.out.println("added: " + line); line = in.nextLine(); tokens = line.split(" ", 0); From 07bc4d57288cdd177decf720cbb2533416220870 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Thu, 16 Feb 2023 14:26:15 +0800 Subject: [PATCH 09/13] Level 5: Added error management --- src/main/java/Duke.java | 28 ++++++++++++++++++++++------ src/main/java/InvalidCommand.java | 2 ++ 2 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 src/main/java/InvalidCommand.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d70530993..b51ae7394 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -5,9 +5,25 @@ public class Duke { private static Scanner in = new Scanner(System.in); private static final Task[] tasks = new Task[100]; - public static void command(String line) { + public static void whatToDo(String line) { + try { + command(line); + } + catch (InvalidCommand error) { + System.out.println("Try using one of following commands: todo, deadline, event."); + line = in.nextLine(); + whatToDo(line); + } + catch (IndexOutOfBoundsException error) { + System.out.println("Oops! You need to provide a description/time for your task"); + line = in.nextLine(); + whatToDo(line); + } + } + + public static void command(String line) throws InvalidCommand { String exitCommand = "bye"; - String toDo = "list"; + String taskList = "list"; String checkAsDone = "mark"; int numberOfTasks = 0; @@ -15,7 +31,7 @@ public static void command(String line) { String command = tokens[0]; while (!command.equals(exitCommand)) { - if (tokens[0].equals(toDo)) { + if (tokens[0].equals(taskList)) { System.out.println("Here are your list of tasks to complete!"); for (int i = 0; i < numberOfTasks; ++i) { System.out.format("%d. ", (i + 1)); @@ -68,8 +84,8 @@ public static void command(String line) { ++numberOfTasks; break; default: - System.out.println("Sorry! There seems to be an error:( Please try again."); - break; + System.out.println("Sorry! I couldn't understand your command:( Please try again."); + throw new InvalidCommand(); } System.out.println("added: " + line); line = in.nextLine(); @@ -91,6 +107,6 @@ public static void main(String[] args) { String line; line = in.nextLine(); - command(line); + whatToDo(line); } } diff --git a/src/main/java/InvalidCommand.java b/src/main/java/InvalidCommand.java new file mode 100644 index 000000000..4eac004e9 --- /dev/null +++ b/src/main/java/InvalidCommand.java @@ -0,0 +1,2 @@ +public class InvalidCommand extends Exception { +} From f35b087e81d04c66b102d1d9fca4fa6d9d9bd33b Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Fri, 24 Feb 2023 17:39:42 +0800 Subject: [PATCH 10/13] Level 6: Added "delete" feature --- src/main/java/Duke.java | 16 ++++++++++++++++ src/main/java/META-INF/MANIFEST.MF | 3 +++ 2 files changed, 19 insertions(+) create mode 100644 src/main/java/META-INF/MANIFEST.MF diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index b51ae7394..12153a76d 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -25,6 +25,7 @@ public static void command(String line) throws InvalidCommand { String exitCommand = "bye"; String taskList = "list"; String checkAsDone = "mark"; + String del = "delete"; int numberOfTasks = 0; String[] tokens = line.split(" ", 2); @@ -50,6 +51,21 @@ public static void command(String line) throws InvalidCommand { System.out.println(tasks[i]); } + line = in.nextLine(); + tokens = line.split(" ", 0); + command = tokens[0]; + } else if (command.equals(del)) { + int taskToDelete = Integer.parseInt(tokens[1]) - 1; + for (int i = taskToDelete; i < (tasks.length - 1); ++i) { + tasks[i] = tasks[i + 1]; + } + --numberOfTasks; + System.out.println("Removed task number " + (taskToDelete + 1) + ". Here are your remaining tasks:"); + for (int i = 0; i < numberOfTasks; ++i) { + System.out.format("%d. ", (i + 1)); + System.out.println(tasks[i]); + } + line = in.nextLine(); tokens = line.split(" ", 0); command = tokens[0]; diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 000000000..9f37e4e0a --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: Duke + From f4e64e55895bbd366345264b09a3938f96da7255 Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Thu, 2 Mar 2023 20:25:01 +0800 Subject: [PATCH 11/13] Level 9: "Find" function implemented --- src/main/java/Duke.java | 102 ++++++++++++++++++++++++++-------------- 1 file changed, 67 insertions(+), 35 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 12153a76d..780dc9b99 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -4,6 +4,7 @@ public class Duke { private static Scanner in = new Scanner(System.in); private static final Task[] tasks = new Task[100]; + private static final Task[] foundTasks = new Task[100]; public static void whatToDo(String line) { try { @@ -21,11 +22,23 @@ public static void whatToDo(String line) { } } + public static boolean isWordPresent(Task task, String keyword) { + String[] words = (task.description).split(" "); + + for (String temp : words) { + if (temp.compareToIgnoreCase(keyword) == 0) { + return true; + } + } + return false; + } + public static void command(String line) throws InvalidCommand { String exitCommand = "bye"; String taskList = "list"; String checkAsDone = "mark"; String del = "delete"; + String search = "find"; int numberOfTasks = 0; String[] tokens = line.split(" ", 2); @@ -69,46 +82,65 @@ public static void command(String line) throws InvalidCommand { line = in.nextLine(); tokens = line.split(" ", 0); command = tokens[0]; - } else { - String task = tokens[1]; - switch(command) { - case "todo": - Task t = new ToDo(task); - tasks[numberOfTasks] = t; - tasks[numberOfTasks].isDone = false; - ++numberOfTasks; - break; - case "deadline": - String[] taskDeadline = task.split("/", 2); - String taskDescription = taskDeadline[0]; - String dueBy = taskDeadline[1]; - - Task d = new Deadline(taskDescription, dueBy); - tasks[numberOfTasks] = d; - tasks[numberOfTasks].isDone = false; - ++numberOfTasks; - break; - case "event": - String[] taskEvent = task.split("/", 3); - String eventDescription = taskEvent[0]; - String start = taskEvent[1]; - String end = taskEvent[2]; - - Task e = new Event(eventDescription, start, end); - tasks[numberOfTasks] = e; - tasks[numberOfTasks].isDone = false; - ++numberOfTasks; - break; - default: - System.out.println("Sorry! I couldn't understand your command:( Please try again."); - throw new InvalidCommand(); + } else if (command.equals(search)) { + String itemToFind = tokens[1]; + int searchNumber = 0; + + for (int i = 0; i < numberOfTasks; ++i) { + if (isWordPresent(tasks[i], itemToFind)) { + foundTasks[searchNumber] = tasks[i]; + searchNumber++; + } } - System.out.println("added: " + line); + System.out.println("Tasks matching with " + itemToFind); + for (int i = 0; i < searchNumber; ++i) { + System.out.format("%d. ", (i + 1)); + System.out.println(foundTasks[i]); + } + line = in.nextLine(); tokens = line.split(" ", 0); command = tokens[0]; + } else { + String task = tokens[1]; + switch(command) { + case "todo": + Task t = new ToDo(task); + tasks[numberOfTasks] = t; + tasks[numberOfTasks].isDone = false; + ++numberOfTasks; + break; + case "deadline": + String[] taskDeadline = task.split("/", 2); + String taskDescription = taskDeadline[0]; + String dueBy = taskDeadline[1]; + + Task d = new Deadline(taskDescription, dueBy); + tasks[numberOfTasks] = d; + tasks[numberOfTasks].isDone = false; + ++numberOfTasks; + break; + case "event": + String[] taskEvent = task.split("/", 3); + String eventDescription = taskEvent[0]; + String start = taskEvent[1]; + String end = taskEvent[2]; + + Task e = new Event(eventDescription, start, end); + tasks[numberOfTasks] = e; + tasks[numberOfTasks].isDone = false; + ++numberOfTasks; + break; + default: + System.out.println("Sorry! I couldn't understand your command:( Please try again."); + throw new InvalidCommand(); + } + System.out.println("added: " + line); + line = in.nextLine(); + tokens = line.split(" ", 0); + command = tokens[0]; + } } - } System.out.println("Bye! Hope to see you again"); } From 5fbe514f23480a27622fc26eca7869cbee17ba66 Mon Sep 17 00:00:00 2001 From: Lee Zhi Zhong Moses <72350236+moseslee9012@users.noreply.github.com> Date: Thu, 2 Mar 2023 20:51:46 +0800 Subject: [PATCH 12/13] Update README.md --- README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/README.md b/README.md index 8715d4d91..678e0d108 100644 --- a/README.md +++ b/README.md @@ -22,3 +22,30 @@ Prerequisites: JDK 11, update Intellij to the most recent version. | |_| | |_| | < __/ |____/ \__,_|_|\_\___| ``` + +## How to use + +The commands this program uses are; `todo`, `deadline`, `event`, `list`, `mark`, `find`, `delete` and `bye`** +`todo`, `deadline` and `event` are the different types of tasks you can add into your list to keep track of. + +1. `todo`s are the simplest task to add as they do not require you to add in a start/end time, only a description of the task +e.g. `todo lunch` + +2. `deadline`s, as the name suggests, are tasks which have a deadline. The due date or time is indicated after a `/` +e.g. `lunch/12pm` + +3. `event`s are tasks which have a duration, from a start time to an end time +e.g. `lunch/12pm/1pm + +4. `list` shows you the tasks which you have added. You can view them by simply typing `list` + +5. `mark` checks off the task which you have completed. +e.g. `mark 3` + +6. `find` searches your list of tasks to find those which have a certain ketword present. +e.g. `find lunch` + +7. `delete` removes one of the tasks in your list +e.g. `delete 2` + +Finally, `bye` allows you the exit program From 11fed995848fa6200449ef918bdb698bde66438c Mon Sep 17 00:00:00 2001 From: moseslee9012 Date: Wed, 15 Mar 2023 23:31:29 +0800 Subject: [PATCH 13/13] Added classes for different commands, for Ui and Parser. Added unmarkDone method under Task --- src/main/java/AddTask.java | 2 ++ src/main/java/ByeCommand.java | 2 ++ src/main/java/DeleteCommand.java | 2 ++ src/main/java/DisplayMessages.java | 2 ++ src/main/java/Duke.java | 40 ++++++++++++++++------ src/main/java/InvalidCommand.java | 2 -- src/main/java/InvalidCommandException.java | 2 ++ src/main/java/ListCommand.java | 3 ++ src/main/java/MarkCommand.java | 2 ++ src/main/java/Parser.java | 22 ++++++++++++ src/main/java/Task.java | 6 +++- src/main/java/Ui.java | 4 +++ src/main/java/UnmarkCommand.java | 2 ++ 13 files changed, 78 insertions(+), 13 deletions(-) create mode 100644 src/main/java/AddTask.java create mode 100644 src/main/java/ByeCommand.java create mode 100644 src/main/java/DeleteCommand.java create mode 100644 src/main/java/DisplayMessages.java delete mode 100644 src/main/java/InvalidCommand.java create mode 100644 src/main/java/InvalidCommandException.java create mode 100644 src/main/java/ListCommand.java create mode 100644 src/main/java/MarkCommand.java create mode 100644 src/main/java/Parser.java create mode 100644 src/main/java/Ui.java create mode 100644 src/main/java/UnmarkCommand.java diff --git a/src/main/java/AddTask.java b/src/main/java/AddTask.java new file mode 100644 index 000000000..1285c7ad7 --- /dev/null +++ b/src/main/java/AddTask.java @@ -0,0 +1,2 @@ +public class AddTask { +} diff --git a/src/main/java/ByeCommand.java b/src/main/java/ByeCommand.java new file mode 100644 index 000000000..d5dc5f1af --- /dev/null +++ b/src/main/java/ByeCommand.java @@ -0,0 +1,2 @@ +public class ByeCommand { +} diff --git a/src/main/java/DeleteCommand.java b/src/main/java/DeleteCommand.java new file mode 100644 index 000000000..1ba316b3f --- /dev/null +++ b/src/main/java/DeleteCommand.java @@ -0,0 +1,2 @@ +public class DeleteCommand { +} diff --git a/src/main/java/DisplayMessages.java b/src/main/java/DisplayMessages.java new file mode 100644 index 000000000..0aa0c0b92 --- /dev/null +++ b/src/main/java/DisplayMessages.java @@ -0,0 +1,2 @@ +public class DisplayMessages { +} diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 780dc9b99..afcc3530b 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -10,7 +10,7 @@ public static void whatToDo(String line) { try { command(line); } - catch (InvalidCommand error) { + catch (InvalidCommandException error) { System.out.println("Try using one of following commands: todo, deadline, event."); line = in.nextLine(); whatToDo(line); @@ -33,7 +33,7 @@ public static boolean isWordPresent(Task task, String keyword) { return false; } - public static void command(String line) throws InvalidCommand { + public static void command(String line) throws InvalidCommandException { String exitCommand = "bye"; String taskList = "list"; String checkAsDone = "mark"; @@ -56,7 +56,7 @@ public static void command(String line) throws InvalidCommand { command = tokens[0]; } else if (command.equals(checkAsDone)){ int finishedTask = Integer.parseInt(tokens[1]) - 1; - tasks[finishedTask].markAsDone(); + tasks[finishedTask].markDone(); System.out.println("Alright! I have marked the task as complete!"); for (int i = 0; i < numberOfTasks; ++i) { @@ -133,7 +133,7 @@ public static void command(String line) throws InvalidCommand { break; default: System.out.println("Sorry! I couldn't understand your command:( Please try again."); - throw new InvalidCommand(); + throw new InvalidCommandException(); } System.out.println("added: " + line); line = in.nextLine(); @@ -145,13 +145,33 @@ public static void command(String line) throws InvalidCommand { } public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; + String logo = " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡟⠋⠈⠙⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠤⢤⡀⠀⠀\n" + + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠈⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠞⠀⠀⢠⡜⣦⠀\n" + + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡃⠀⠀⠀⠀⠈⢷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⣠⠀⠀⠀⠀⢻⡘⡇\n" + + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠃⠀⠀⠀⠀⠀⠀⠙⢶⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠚⢀⡼⠃⠀⠀⠀⠀⠸⣇⢳\n" + + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠀⣀⠖⠀⠀⠀⠀⠉⠀⠀⠈⠉⠛⠛⡛⢛⠛⢳⡶⠖⠋⠀⢠⡞⠀⠀⠀⠐⠆⠀⠀⣿⢸\n" + + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣦⣀⣴⡟⠀⠀⢶⣶⣾⡿⠀⠀⣿⢸\n" + + "⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀⡠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣏⠀⠀⠀⣶⣿⣿⡇⠀⠀⢏⡞\n" + + "⠀⠀⠀⠀⠀⠀⢀⡴⠛⠀⠀⠀⠀⠀⠀⠀⠀⢀⢀⡾⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢦⣤⣾⣿⣿⠋⠀⠀⡀⣾⠁\n" + + "⠀⠀⠀⠀⠀⣠⠟⠁⠀⠀⠀⣀⠀⠀⠀⠀⢀⡟⠈⢀⣤⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⣏⡁⠀⠐⠚⠃⣿⠀\n" + + "⠀⠀⠀⠀⣴⠋⠀⠀⠀⡴⣿⣿⡟⣷⠀⠀⠊⠀⠴⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠀⠀⠀⠀⢹⡆\n" + + "⠀⠀⠀⣴⠃⠀⠀⠀⠀⣇⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⡶⢶⣶⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇\n" + + "⠀⠀⣸⠃⠀⠀⠀⢠⠀⠊⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⢲⣾⣿⡏⣾⣿⣿⣿⣿⠖⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢧\n" + + "⠀⢠⡇⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⠛⠿⣽⣿⡿⠏⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡜\n" + + "⢀⡿⠀⠀⠀⠀⢀⣤⣶⣟⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇\n" + + "⢸⠇⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇\n" + + "⣼⠀⢀⡀⠀⠀⢷⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡇\n" + + "⡇⠀⠈⠀⠀⠀⣬⠻⣿⣿⣿⡿⠙⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠁\n" + + "⢹⡀⠀⠀⠀⠈⣿⣶⣿⣿⣝⡛⢳⠭⠍⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠃⠀\n" + + "⠸⡇⠀⠀⠀⠀⠙⣿⣿⣿⣿⣿⣿⣷⣦⣀⣀⣀⣤⣤⣴⡶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠇⠀⠀\n" + + "⠀⢿⡄⠀⠀⠀⠀⠀⠙⣇⠉⠉⠙⠛⠻⠟⠛⠛⠉⠙⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⠋⠀⠀⠀\n" + + "⠀⠈⢧⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠞⠁⠀⠀⠀⠀\n" + + "⠀⠀⠘⢷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠞⠁⠀⠀⠀⠀⠀⠀\n" + + "⠀⠀⠀⠀⠱⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡴⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀\n" + + "⠀⠀⠀⠀⠀⠀⠛⢦⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⠴⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n" + + "⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠲⠤⣤⣤⣤⣄⠀⠀⠀⠀⠀⠀⠀⢠⣤⣤⠤⠴⠒⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀"; System.out.println("Hello from\n" + logo); - System.out.println("Hi! My name is Duke. \n Nice to meet you!"); + System.out.println("Hi! My name is Doge. \n Nice to meet you!"); String line; line = in.nextLine(); diff --git a/src/main/java/InvalidCommand.java b/src/main/java/InvalidCommand.java deleted file mode 100644 index 4eac004e9..000000000 --- a/src/main/java/InvalidCommand.java +++ /dev/null @@ -1,2 +0,0 @@ -public class InvalidCommand extends Exception { -} diff --git a/src/main/java/InvalidCommandException.java b/src/main/java/InvalidCommandException.java new file mode 100644 index 000000000..c6b3a54e2 --- /dev/null +++ b/src/main/java/InvalidCommandException.java @@ -0,0 +1,2 @@ +public class InvalidCommandException extends Exception { +} diff --git a/src/main/java/ListCommand.java b/src/main/java/ListCommand.java new file mode 100644 index 000000000..9f89570cc --- /dev/null +++ b/src/main/java/ListCommand.java @@ -0,0 +1,3 @@ +public class ListCommand { + +} diff --git a/src/main/java/MarkCommand.java b/src/main/java/MarkCommand.java new file mode 100644 index 000000000..dc808500b --- /dev/null +++ b/src/main/java/MarkCommand.java @@ -0,0 +1,2 @@ +public class MarkCommand { +} diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java new file mode 100644 index 000000000..f872d5b13 --- /dev/null +++ b/src/main/java/Parser.java @@ -0,0 +1,22 @@ + +public class Parser { + + String command; + String taskDescription; + String deadline; + String startDate; + String endDate; + String taskNumber; + boolean shouldQuit = false; + + + public Parser (String userInput) { + String[] tokens = userInput.split(" "); + command = tokens[0]; + + switch(command) { + case "list": + + } + } +} diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 36f11c7fd..dbf3a0fcd 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -11,10 +11,14 @@ public String getStatus() { return (isDone ? "[X]" : "[ ]"); // mark done task with X } - public void markAsDone() { + public void markDone() { this.isDone = true; } + public void unmarkDone() { + this.isDone = false; + } + public String toString() { return getStatus() + " " + description; } diff --git a/src/main/java/Ui.java b/src/main/java/Ui.java new file mode 100644 index 000000000..99e594237 --- /dev/null +++ b/src/main/java/Ui.java @@ -0,0 +1,4 @@ +public class Ui { + + +} diff --git a/src/main/java/UnmarkCommand.java b/src/main/java/UnmarkCommand.java new file mode 100644 index 000000000..6d3ac5a36 --- /dev/null +++ b/src/main/java/UnmarkCommand.java @@ -0,0 +1,2 @@ +public class UnmarkCommand { +}