Skip to content

Commit 81d2a9a

Browse files
Add spaced repetition flashcard mode
1 parent c98f163 commit 81d2a9a

File tree

11 files changed

+52
-107
lines changed

11 files changed

+52
-107
lines changed

META-INF/MANIFEST.MF

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Manifest-Version: 1.0
2+
Main-Class: seedu.duke.Duke
3+

data/flashcards/flashcard.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3 | Hello | Duke | - | - | -

src/main/java/seedu/duke/flashcard/Flashcard.java

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,21 @@
22

33
package seedu.duke.flashcard;
44

5-
import seedu.duke.flashcard.review.FlashcardReview;
6-
75
import java.time.LocalDateTime;
86
import java.util.ArrayList;
97

108
public class Flashcard {
119
private static int globalMaxId = 1;
1210
private String frontText;
1311
private String backText;
14-
private ArrayList<FlashcardReview> reviews;
15-
private LocalDateTime lastReviewOn;
1612
private int id;
13+
private int difficulty;
1714

1815
public Flashcard(String frontText, String backText) {
1916
this.frontText = frontText;
2017
this.backText = backText;
2118

22-
reviews = new ArrayList<>();
23-
24-
lastReviewOn = null;
19+
difficulty = 5; // initial difficulty of a flashcard
2520

2621
globalMaxId += 1;
2722
id = globalMaxId;
@@ -39,10 +34,6 @@ public static void calculateAndUpdateGlobalMaxId(FlashcardList flashcardList) {
3934
globalMaxId = currentMax + 1;
4035
}
4136

42-
public void setLastReviewOn(LocalDateTime lastReviewOn) {
43-
this.lastReviewOn = lastReviewOn;
44-
}
45-
4637
public String getFrontText() {
4738
return frontText;
4839
}
@@ -56,25 +47,23 @@ public String getBackText() {
5647
}
5748

5849
//@@author junhyeong0411
59-
60-
public ArrayList<FlashcardReview> getReviews(){
61-
return reviews;
62-
}
63-
6450
public void setId (int id) {
6551
this.id = id;
6652
}
6753

6854

69-
//@@author WenderlinWemhoener
55+
//@@author wendelinwemhoener
7056
public String toString() {
7157
return "front text: " + frontText + System.lineSeparator()
7258
+ "back text: " + backText + System.lineSeparator()
73-
+ "next review due on: " + lastReviewOn + System.lineSeparator()
7459
+ "id: " + id + System.lineSeparator();
7560
}
7661

77-
public void addReview(FlashcardReview flashcardReview) {
78-
reviews.add(flashcardReview);
62+
public void applyDifficultyChange(int difficultyChange) {
63+
difficulty += difficultyChange;
64+
}
65+
66+
public int getDifficulty() {
67+
return difficulty;
7968
}
8069
}

src/main/java/seedu/duke/flashcard/FlashcardStorage.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package seedu.duke.flashcard;
22

3-
import seedu.duke.flashcard.review.FlashcardReview;
4-
53
import java.io.File;
64
import java.io.FileNotFoundException;
75
import java.io.FileWriter;

src/main/java/seedu/duke/flashcard/FlashcardStorageParser.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package seedu.duke.flashcard;
22

3-
import seedu.duke.flashcard.review.FlashcardReview;
4-
import seedu.duke.flashcard.review.ReviewDifficulty;
5-
63
import java.time.LocalDateTime;
74
import java.util.ArrayList;
85

src/main/java/seedu/duke/flashcard/command/StartReviewCommand.java

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import seedu.duke.flashcard.FlashcardList;
66
import seedu.duke.flashcard.review.RandomReviewMode;
7-
import seedu.duke.flashcard.review.ReviewByTagMode;
87
import seedu.duke.flashcard.review.ReviewMode;
98
import seedu.duke.flashcard.review.SpacedRepetitionReviewMode;
109

@@ -14,7 +13,7 @@
1413

1514
public class StartReviewCommand extends DualFlashcardCommand {
1615
private final ArrayList<String> choices = new ArrayList<>(Arrays.asList(
17-
"a", "b", "c"));
16+
"a", "b"));
1817

1918
public StartReviewCommand(String input) {
2019
this.input = input;
@@ -27,7 +26,6 @@ private String getUserChoiceReviewMode(Scanner scanner) {
2726
System.out.println(" How do you want to review your flashcards?");
2827
System.out.println(" a) random mode");
2928
System.out.println(" b) spaced repetition mode");
30-
System.out.println(" c) review by tag mode");
3129

3230
return scanner.nextLine();
3331
}
@@ -37,8 +35,8 @@ protected void executeBeginnerMode(Scanner scanner,
3735
String choice = getUserChoiceReviewMode(scanner);
3836

3937
while (!choices.contains(choice.toLowerCase())) {
40-
System.out.println(" Invalid choice! Your choice must be a, b " +
41-
"or c! Please try again.");
38+
System.out.println(" Invalid choice! Your choice must be a or " +
39+
"b! Please try again.");
4240

4341
choice = getUserChoiceReviewMode(scanner);
4442
}
@@ -54,8 +52,8 @@ protected void executeExpertMode(Scanner scanner,
5452
String choice = commandParts[2].toLowerCase();
5553

5654
if (!choices.contains(choice)) {
57-
System.out.println(" Invalid choice! Your choice must be a, b " +
58-
"or c! Please try again.");
55+
System.out.println(" Invalid choice! Your choice must be a" +
56+
" or b! Please try again.");
5957
return;
6058
}
6159

@@ -65,21 +63,15 @@ protected void executeExpertMode(Scanner scanner,
6563
"flashcards REVIEW_MODE'");
6664
System.out.println(" Please try again.");
6765
}
68-
69-
7066
}
7167

7268
private void startReview(Scanner scanner,
7369
FlashcardList flashcardList,
7470
String choice) {
7571
ReviewMode reviewMode = createReviewMode(choice.toLowerCase(), flashcardList);
7672

77-
if (reviewMode instanceof RandomReviewMode) {
78-
reviewMode.startReviewSession(scanner);
79-
} else {
80-
System.out.println(" This review mode hasn't yet been " +
81-
"implemented. Sorry!");
82-
}
73+
reviewMode.startReviewSession(scanner);
74+
8375
}
8476

8577
private ReviewMode createReviewMode(String choice, FlashcardList flashcardList) {
@@ -89,8 +81,6 @@ private ReviewMode createReviewMode(String choice, FlashcardList flashcardList)
8981
reviewMode = new RandomReviewMode(flashcardList);
9082
} else if (choice.equals("b")) {
9183
reviewMode = new SpacedRepetitionReviewMode(flashcardList);
92-
} else if (choice.equals("c")) {
93-
reviewMode = new ReviewByTagMode(flashcardList);
9484
}
9585

9686
assert reviewMode != null;

src/main/java/seedu/duke/flashcard/review/FlashcardReview.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/main/java/seedu/duke/flashcard/review/ReviewByTagMode.java

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/main/java/seedu/duke/flashcard/review/ReviewDifficulty.java

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/main/java/seedu/duke/flashcard/review/ReviewMode.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import seedu.duke.flashcard.Flashcard;
66
import seedu.duke.flashcard.FlashcardList;
77

8-
import java.time.LocalDateTime;
98
import java.util.ArrayList;
109
import java.util.Arrays;
1110
import java.util.Scanner;
@@ -21,8 +20,13 @@ public ReviewMode(FlashcardList flashcardList) {
2120

2221
public void startReviewSession(Scanner scanner) {
2322
System.out.println(" You have started a review session in "
24-
+ getReviewModeName());
25-
System.out.println();
23+
+ getReviewModeName() + System.lineSeparator());
24+
25+
if (flashcardList.isEmpty()) {
26+
System.out.println(" You have no flashcards to review!");
27+
System.out.println(" Add some flashcards and try again.");
28+
return;
29+
}
2630

2731
while (true) {
2832
Flashcard flashcardToReview = pickFlashcard();
@@ -38,9 +42,9 @@ public void startReviewSession(Scanner scanner) {
3842
System.out.println(" The actual back text is: " + flashcardToReview.getBackText());
3943
System.out.println();
4044

41-
letUserRateReviewDifficulty(scanner, flashcardToReview);
42-
43-
flashcardToReview.setLastReviewOn(LocalDateTime.now());
45+
if (getReviewModeName().equals("spaced repetition mode")) {
46+
letUserRateReviewDifficulty(scanner, flashcardToReview);
47+
}
4448
}
4549

4650
System.out.println(" Success! You have ended this review session.");
@@ -78,21 +82,19 @@ protected void letUserRateReviewDifficulty(Scanner scanner,
7882
choice = scanner.nextLine();
7983
}
8084

81-
ReviewDifficulty reviewDifficulty;
85+
int difficultyChange;
8286
switch (choice.toLowerCase()) {
8387
case "e":
84-
reviewDifficulty = ReviewDifficulty.EASY;
88+
difficultyChange = -1;
8589
break;
8690
case "m":
87-
reviewDifficulty = ReviewDifficulty.MODERATE;
91+
difficultyChange = 0;
8892
break;
8993
default:
90-
reviewDifficulty = ReviewDifficulty.HARD;
94+
difficultyChange = +1;
9195
break;
9296
}
9397

94-
FlashcardReview flashcardReview =
95-
new FlashcardReview(LocalDateTime.now(), reviewDifficulty);
96-
flashcard.addReview(flashcardReview);
98+
flashcard.applyDifficultyChange(difficultyChange);
9799
}
98100
}

0 commit comments

Comments
 (0)