-
Notifications
You must be signed in to change notification settings - Fork 435
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[shunjieee] iP #455
base: master
Are you sure you want to change the base?
[shunjieee] iP #455
Changes from 16 commits
55f9f9f
f837ddb
a6f7324
c4f0b7c
63aaba6
60e044f
3dcf67f
5c6a182
7e74b17
3477c2a
e2862b0
e38ae26
c527c2b
8f063a8
6ccab68
0ebbf06
b884da4
02c1ec3
6389e2f
52aa83d
d09f72d
002c741
8794e7b
5bdb39f
36fc9c1
9edacad
78c4609
66be4d7
7c544b8
d2b525d
c14ea0b
0a2e5cc
ed6a9e1
273756d
84f6c79
1edebbc
eb0a523
512850b
7dc4874
c3021a5
a1312ca
f6366fc
6f053af
174c867
4fb3e11
b975ff1
f5313e0
e7e3cee
4249056
695fc44
19b1366
0593345
b3709df
02139f1
3f8ae17
9ef7366
8855b03
b27fbdc
94485a0
17dbcf3
688934e
7eb276c
64e3c42
5091616
e982e06
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,3 +1,14 @@ | ||||||||||||||||||||||||||||||
import helperpackage.Deadline; | ||||||||||||||||||||||||||||||
import helperpackage.DukeException; | ||||||||||||||||||||||||||||||
import helperpackage.Event; | ||||||||||||||||||||||||||||||
import helperpackage.Task; | ||||||||||||||||||||||||||||||
import helperpackage.ToDo; | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
import java.util.LinkedList; | ||||||||||||||||||||||||||||||
import java.util.NoSuchElementException; | ||||||||||||||||||||||||||||||
import java.util.Scanner; | ||||||||||||||||||||||||||||||
import java.util.StringTokenizer; | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
public class Duke { | ||||||||||||||||||||||||||||||
public static void main(String[] args) { | ||||||||||||||||||||||||||||||
String logo = " ____ _ \n" | ||||||||||||||||||||||||||||||
|
@@ -6,5 +17,150 @@ public static void main(String[] args) { | |||||||||||||||||||||||||||||
+ "| |_| | |_| | < __/\n" | ||||||||||||||||||||||||||||||
+ "|____/ \\__,_|_|\\_\\___|\n"; | ||||||||||||||||||||||||||||||
System.out.println("Hello from\n" + logo); | ||||||||||||||||||||||||||||||
System.out.println("________________________________________"); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
System.out.println("Hello! I'm NextGenerationJarvis."); | ||||||||||||||||||||||||||||||
System.out.println("What can I do for you?"); | ||||||||||||||||||||||||||||||
System.out.println("________________________________________\n"); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Scanner scanner = new Scanner(System.in); | ||||||||||||||||||||||||||||||
String userInput = scanner.nextLine(); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
/** Used to store Tasks */ | ||||||||||||||||||||||||||||||
LinkedList<Task> taskList = new LinkedList<>(); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
// loop only exits if input is "bye" | ||||||||||||||||||||||||||||||
while (!userInput.toLowerCase().equals("bye")) { | ||||||||||||||||||||||||||||||
System.out.println("\n________________________________________"); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
// Level-2: if the input is "list" | ||||||||||||||||||||||||||||||
if (userInput.toLowerCase().equals("list")) { | ||||||||||||||||||||||||||||||
System.out.println("Here are the tasks in your list:"); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
for (int i = 1; i <= taskList.size(); i++) { | ||||||||||||||||||||||||||||||
Task t = taskList.get(i - 1); | ||||||||||||||||||||||||||||||
System.out.println(i + ". " + t.toString()); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||
StringTokenizer st = new StringTokenizer(userInput); | ||||||||||||||||||||||||||||||
String cmd = st.nextToken().toLowerCase(); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
// Level-3: mark & unmark | ||||||||||||||||||||||||||||||
if (cmd.equals("mark") || (cmd.equals("unmark"))) { | ||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||
changeStatus(taskList, cmd, st); | ||||||||||||||||||||||||||||||
} catch (IndexOutOfBoundsException e) { | ||||||||||||||||||||||||||||||
System.out.println("Task not found. :("); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
} catch (NumberFormatException e) { | ||||||||||||||||||||||||||||||
System.out.println("Input is not an integer. :("); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
} catch (NoSuchElementException e) { | ||||||||||||||||||||||||||||||
System.out.println("Missing task number. :("); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
// Level-4: ToDo, Deadline, Event | ||||||||||||||||||||||||||||||
} else if (cmd.equals("todo") || cmd.equals("event") || cmd.equals("deadline")) { | ||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||
addTask(taskList, cmd, userInput); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
} catch (DukeException e) { | ||||||||||||||||||||||||||||||
System.out.println(e.getMessage()); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
} catch (StringIndexOutOfBoundsException e) { | ||||||||||||||||||||||||||||||
System.out.println("Invalid input. :("); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
// Level-6: Delete | ||||||||||||||||||||||||||||||
} else if (cmd.equals("delete")) { | ||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||
delete(taskList, cmd, st); | ||||||||||||||||||||||||||||||
} catch (IndexOutOfBoundsException e) { | ||||||||||||||||||||||||||||||
System.out.println("Task not found. :("); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
} catch (NumberFormatException e) { | ||||||||||||||||||||||||||||||
System.out.println("Input is not an integer. :("); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
} catch (NoSuchElementException e) { | ||||||||||||||||||||||||||||||
System.out.println("Missing task number. :("); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
// Level-5: Throw exception for other inputs | ||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||
throw new DukeException("OOPS!! Pls try again. :)"); | ||||||||||||||||||||||||||||||
} catch (DukeException e) { | ||||||||||||||||||||||||||||||
System.out.println(e.getMessage()); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
System.out.println("________________________________________\n"); | ||||||||||||||||||||||||||||||
userInput = scanner.nextLine(); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
System.out.println("\n________________________________________"); | ||||||||||||||||||||||||||||||
System.out.println("Bye. Hope to see you again soon!"); | ||||||||||||||||||||||||||||||
System.out.println("________________________________________\n"); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
scanner.close(); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
// Level-3: mark & unmark | ||||||||||||||||||||||||||||||
public static void changeStatus(LinkedList<Task> taskList, String cmd, StringTokenizer st) throws IndexOutOfBoundsException, | ||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like how you use line wrapping at appropriate place of this line |
||||||||||||||||||||||||||||||
NumberFormatException, NoSuchElementException { | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
int index = Integer.parseInt(st.nextToken()); | ||||||||||||||||||||||||||||||
Task t = taskList.get(index - 1); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
if (cmd.equals("mark")) { | ||||||||||||||||||||||||||||||
t.markAsDone(); | ||||||||||||||||||||||||||||||
System.out.println("Nice! I've marked this task as done:"); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
} else if (cmd.equals("unmark")) { | ||||||||||||||||||||||||||||||
t.unmark(); | ||||||||||||||||||||||||||||||
System.out.println("OK, I've marked this task as not done yet:"); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
System.out.println(" " + t.toString()); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
// Level-4: ToDo, Deadline, Event | ||||||||||||||||||||||||||||||
public static void addTask(LinkedList<Task> taskList, String cmd, String userInput) throws DukeException { | ||||||||||||||||||||||||||||||
int firstSpaceIndex = userInput.indexOf(" "); | ||||||||||||||||||||||||||||||
String description = userInput.substring(firstSpaceIndex + 1); | ||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here the |
||||||||||||||||||||||||||||||
Task t = new Task(" "); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
if (cmd.equals("todo")) { | ||||||||||||||||||||||||||||||
description = description.strip(); | ||||||||||||||||||||||||||||||
if (description.equals("") || firstSpaceIndex == -1) { | ||||||||||||||||||||||||||||||
throw new DukeException("Invalid todo input. :("); | ||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||
t = new ToDo(description); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
} else if (cmd.equals("deadline")) { | ||||||||||||||||||||||||||||||
t = new Deadline(description); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
} else if (cmd.equals("event")) { | ||||||||||||||||||||||||||||||
t = new Event(description); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
taskList.add(t); | ||||||||||||||||||||||||||||||
System.out.println("Got it. I've added this task:"); | ||||||||||||||||||||||||||||||
System.out.println(" " + t.toString()); | ||||||||||||||||||||||||||||||
System.out.println("Now you have " + taskList.size() + " tasks in the list."); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
// Level-6: Delete | ||||||||||||||||||||||||||||||
public static void delete (LinkedList<Task> taskList, String cmd, StringTokenizer st) throws IndexOutOfBoundsException, | ||||||||||||||||||||||||||||||
NumberFormatException, NoSuchElementException { | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
int index = Integer.parseInt(st.nextToken()); | ||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The name |
||||||||||||||||||||||||||||||
Task t = taskList.remove(index - 1); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
System.out.println("Noted, I've removed this task:"); | ||||||||||||||||||||||||||||||
System.out.println(" " + t.toString()); | ||||||||||||||||||||||||||||||
System.out.println("Now you have " + taskList.size() + " tasks in the list."); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package helperpackage; | ||
|
||
public class Deadline extends Task { | ||
protected String deadline; | ||
|
||
public Deadline(String description) throws DukeException { | ||
super(description.substring(0, description.indexOf("/"))); | ||
String deadline = description.substring(description.indexOf("/")).replace("/by", "by:"); | ||
|
||
if (!deadline.contains("by:")) { | ||
throw new DukeException("Invalid deadline input. :("); | ||
} | ||
|
||
this.deadline = deadline; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "[D]" + super.toString() + "(" + deadline + ")"; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package helperpackage; | ||
|
||
public class DukeException extends Exception { | ||
|
||
// constructor | ||
public DukeException(String message) { | ||
super(message); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package helperpackage; | ||
|
||
public class Event extends Task { | ||
protected String startAndEndTime; | ||
|
||
public Event(String description) throws DukeException { | ||
super(description.substring(0, description.indexOf("/"))); | ||
String time = description.substring(description.indexOf("/")).replace("/from", | ||
"from:").replace("/to", "to:"); | ||
|
||
if (!(time.contains("from:") || time.contains("to:"))) { | ||
throw new DukeException("Invalid event input. :("); | ||
} | ||
|
||
this.startAndEndTime = time; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "[E]" + super.toString() + "(" + startAndEndTime + ")"; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
package helperpackage; | ||
|
||
/** | ||
* Creates an instance of Task. | ||
*/ | ||
public class Task { | ||
/** Task description, also the user input */ | ||
protected String description; | ||
/** Status of the task, done or not done */ | ||
protected boolean isDone; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like how you name the Boolean variable 😃 |
||
|
||
/** | ||
* Returns an instance of Task, a constructor. | ||
* | ||
* @param description User-defined task name. | ||
*/ | ||
public Task(String description) { | ||
this.description = description; | ||
this.isDone = false; | ||
} | ||
|
||
/** | ||
* Returns the status of the task. | ||
* | ||
* @return A string to indicate the status. | ||
*/ | ||
public String getStatusIcon() { | ||
return (isDone ? "[X] " : "[ ] "); // mark done task with X | ||
} | ||
|
||
/** | ||
* Sets the status of task as done. | ||
*/ | ||
public void markAsDone() { | ||
this.isDone = true; | ||
} | ||
|
||
/** | ||
* Sets the status of task as not done. | ||
*/ | ||
public void unmark() { | ||
this.isDone = false; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return getStatusIcon() + description; | ||
} | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package helperpackage; | ||
|
||
public class ToDo extends Task { | ||
|
||
public ToDo(String description) { | ||
super(description); | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "[T]" + super.toString(); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
todo borrow book | ||
list | ||
deadline return book /by Sunday | ||
event project meeting /from Mon 2pm /to 4pm | ||
list | ||
mark 1 | ||
mark 2 | ||
unmark 1 | ||
bye |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.