Skip to content

Commit eaa2901

Browse files
Implement random flashcard review mode
1 parent e09c0c2 commit eaa2901

File tree

7 files changed

+112
-11
lines changed

7 files changed

+112
-11
lines changed

flashcard.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ flash1 | dfdfdf | - | - | -
33
adfdf | dfdfdf | - | - | -
44
dfdfdf | dfdfdfdfdf | - | - | -
55
who is this | me | - | - | -
6+
dfdfdfdaaaaaaaaaaaaa | dd | - | - | -

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ public class Flashcard {
1212
private String backText;
1313
private ArrayList<String> tags;
1414
private ArrayList<FlashcardReview> reviews;
15-
private LocalDateTime nextReviewOn;
15+
private LocalDateTime lastReviewOn;
16+
17+
public void setLastReviewOn(LocalDateTime lastReviewOn) {
18+
this.lastReviewOn = lastReviewOn;
19+
}
1620

1721
public Flashcard(String frontText, String backText) {
1822
this.frontText = frontText;
@@ -21,7 +25,7 @@ public Flashcard(String frontText, String backText) {
2125
tags = new ArrayList<>();
2226
reviews = new ArrayList<>();
2327

24-
nextReviewOn = null;
28+
lastReviewOn = null;
2529
}
2630

2731
public String getFrontText() {
@@ -36,6 +40,6 @@ public String toString() {
3640
return "front text: " + frontText + System.lineSeparator()
3741
+ "back text: " + backText + System.lineSeparator()
3842
+ "tags: " + tags.toString() + System.lineSeparator()
39-
+ "next review due on: " + nextReviewOn + System.lineSeparator();
43+
+ "next review due on: " + lastReviewOn + System.lineSeparator();
4044
}
4145
}

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package seedu.duke.flashcard.command;
44

55
import seedu.duke.flashcard.FlashcardList;
6+
import seedu.duke.flashcard.review.FlashcardReview;
67
import seedu.duke.flashcard.review.RandomReviewMode;
78
import seedu.duke.flashcard.review.ReviewByTagMode;
89
import seedu.duke.flashcard.review.ReviewMode;
@@ -34,25 +35,25 @@ public void execute(Scanner scanner, FlashcardList flashcardList) {
3435
return;
3536
}
3637

37-
ReviewMode reviewMode = createReviewMode(choice);
38+
ReviewMode reviewMode = createReviewMode(choice, flashcardList);
3839

3940
if (reviewMode instanceof RandomReviewMode) {
40-
41+
reviewMode.startReviewSession(scanner);
4142
} else {
4243
System.out.println("This review mode hasn't yet been implemented." +
4344
" Sorry!");
4445
}
4546
}
4647

47-
private ReviewMode createReviewMode(String choice) {
48+
private ReviewMode createReviewMode(String choice, FlashcardList flashcardList) {
4849
ReviewMode reviewMode = null;
4950

5051
if (choice.equals("a")) {
51-
reviewMode = new RandomReviewMode();
52+
reviewMode = new RandomReviewMode(flashcardList);
5253
} else if (choice.equals("b")) {
53-
reviewMode = new SpacedRepetitionReviewMode();
54+
reviewMode = new SpacedRepetitionReviewMode(flashcardList);
5455
} else if (choice.equals("c")) {
55-
reviewMode = new ReviewByTagMode();
56+
reviewMode = new ReviewByTagMode(flashcardList);
5657
}
5758

5859
assert reviewMode != null;

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,25 @@
22

33
package seedu.duke.flashcard.review;
44

5+
import seedu.duke.flashcard.Flashcard;
6+
import seedu.duke.flashcard.FlashcardList;
7+
8+
import java.util.ArrayList;
9+
import java.util.Random;
10+
511
public class RandomReviewMode extends ReviewMode {
12+
public RandomReviewMode(FlashcardList flashcardList) {
13+
super(flashcardList);
14+
}
15+
16+
public String getReviewModeName() {
17+
return "random review mode";
18+
}
19+
20+
protected Flashcard pickFlashcard() {
21+
ArrayList<Flashcard> flashcards = flashcardList.getFlashcards();
22+
Random random = new Random();
623

24+
return flashcards.get(random.nextInt(flashcards.size()));
25+
}
726
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,18 @@
11
package seedu.duke.flashcard.review;
22

3+
import seedu.duke.flashcard.Flashcard;
4+
import seedu.duke.flashcard.FlashcardList;
5+
36
public class ReviewByTagMode extends ReviewMode {
7+
public ReviewByTagMode(FlashcardList flashcardList) {
8+
super(flashcardList);
9+
}
10+
11+
public String getReviewModeName() {
12+
return "review by tag mode";
13+
}
14+
15+
protected Flashcard pickFlashcard() {
16+
return null;
17+
}
418
}

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

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,58 @@
22

33
package seedu.duke.flashcard.review;
44

5+
import seedu.duke.flashcard.Flashcard;
6+
import seedu.duke.flashcard.FlashcardList;
7+
8+
import java.time.LocalDateTime;
9+
import java.util.Scanner;
10+
511
public abstract class ReviewMode {
6-
public void startReviewSession() {
12+
protected FlashcardList flashcardList;
13+
14+
public ReviewMode(FlashcardList flashcardList) {
15+
this.flashcardList = flashcardList;
16+
}
17+
18+
public abstract String getReviewModeName();
19+
20+
public void startReviewSession(Scanner scanner) {
21+
System.out.println(" [Review session has been started]");
22+
System.out.println(" [Review mode is: " + getReviewModeName() + "]");
23+
System.out.println();
24+
25+
while (true) {
26+
Flashcard flashcardToReview = pickFlashcard();
727

28+
printFlashcardFrontTextPrompt(flashcardToReview);
29+
30+
String input = scanner.nextLine();
31+
boolean shouldTerminate = input.equals("quit") || input.equals("q");
32+
if (shouldTerminate) {
33+
break;
34+
}
35+
36+
System.out.println(" The actual back text is: " + flashcardToReview.getBackText());
37+
System.out.println();
38+
39+
flashcardToReview.setLastReviewOn(LocalDateTime.now());
40+
}
41+
42+
System.out.println(" Success! You have ended this review session.");
843
}
944

10-
public abstract void reviewSingleFlashcard();
45+
protected abstract Flashcard pickFlashcard();
46+
47+
protected void printFlashcardFrontTextPrompt(Flashcard flashcardToReview) {
48+
System.out.println(" " + "-".repeat(76));
49+
System.out.println(" The front text is: " + flashcardToReview.getFrontText());
50+
System.out.println();
51+
52+
System.out.println(" [Think of the answer (the back text) in " +
53+
"your head]");
54+
System.out.println(" [Press <ENTER> when you are ready to " +
55+
"compare it,]");
56+
System.out.println(" [or enter 'q' or 'quit' to end this " +
57+
"review session]");
58+
}
1159
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,19 @@
22

33
package seedu.duke.flashcard.review;
44

5+
import seedu.duke.flashcard.Flashcard;
6+
import seedu.duke.flashcard.FlashcardList;
7+
58
public class SpacedRepetitionReviewMode extends ReviewMode {
9+
public SpacedRepetitionReviewMode(FlashcardList flashcardList) {
10+
super(flashcardList);
11+
}
12+
13+
public String getReviewModeName() {
14+
return "spaced repetition mode";
15+
}
16+
17+
protected Flashcard pickFlashcard() {
18+
return null;
19+
}
620
}

0 commit comments

Comments
 (0)