From 89b900719b981b2185352613d20afba7184db6e6 Mon Sep 17 00:00:00 2001 From: oleksii Date: Wed, 12 Dec 2018 23:55:48 +0200 Subject: [PATCH 1/5] Part three implementation --- .idea/misc.xml | 2 +- src/flashcards/Main.java | 31 +++++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index a165cb3..dc565b0 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/flashcards/Main.java b/src/flashcards/Main.java index d1b036c..d043d34 100644 --- a/src/flashcards/Main.java +++ b/src/flashcards/Main.java @@ -1,7 +1,34 @@ package flashcards; +import java.util.Scanner; + public class Main { - public static void main(String[] args) { - System.out.print("Hello world!"); + + public static void main(String[] args) { + try (Scanner scanner = new Scanner(System.in)) { + System.out.printf("Input the number of cards:\n"); + + int numCards = Integer.parseInt(scanner.nextLine()); + + String[] cards = new String[numCards]; + String[] definitions = new String[numCards]; + + for (int i = 0; i < numCards; i++) { + System.out.printf("The card #%d:\n", i + 1); + cards[i] = scanner.nextLine(); + System.out.printf("The definition of the card #%d:\n", i + 1); + definitions[i] = scanner.nextLine(); + } + + for (int i = 0; i < numCards; i++) { + System.out.printf("Print the definition of \"%s\":\n", cards[i]); + String guess = scanner.nextLine(); + if (definitions[i].equals(guess)) { + System.out.printf("Correct answer. "); + } else { + System.out.printf("Wrong answer (the correct one is \"%s\").", definitions[i]); + } + } } + } } \ No newline at end of file From afdf8712ba1456134a4c6efd3f399a49937c4a25 Mon Sep 17 00:00:00 2001 From: oleksii Date: Thu, 13 Dec 2018 00:45:28 +0200 Subject: [PATCH 2/5] Part four implementation --- src/flashcards/Main.java | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/flashcards/Main.java b/src/flashcards/Main.java index d043d34..4baae13 100644 --- a/src/flashcards/Main.java +++ b/src/flashcards/Main.java @@ -1,5 +1,8 @@ package flashcards; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.Scanner; public class Main { @@ -10,23 +13,30 @@ public static void main(String[] args) { int numCards = Integer.parseInt(scanner.nextLine()); - String[] cards = new String[numCards]; - String[] definitions = new String[numCards]; + Map cardToDefinition = new LinkedHashMap<>(); + Map definitionToCard = new LinkedHashMap<>(); for (int i = 0; i < numCards; i++) { System.out.printf("The card #%d:\n", i + 1); - cards[i] = scanner.nextLine(); + String card = scanner.nextLine(); System.out.printf("The definition of the card #%d:\n", i + 1); - definitions[i] = scanner.nextLine(); + String definition = scanner.nextLine(); + cardToDefinition.put(card, definition); + definitionToCard.put(definition, card); } - for (int i = 0; i < numCards; i++) { - System.out.printf("Print the definition of \"%s\":\n", cards[i]); + for (String card : cardToDefinition.keySet()) { + System.out.printf("Print the definition of \"%s\":\n", card); String guess = scanner.nextLine(); - if (definitions[i].equals(guess)) { + if (definitionToCard.containsKey(guess) && cardToDefinition.get(card).equals(guess)) { System.out.printf("Correct answer. "); + } else if (definitionToCard.containsKey(guess)) { + System.out.printf( + "Wrong answer (the correct one is \"%s\", you've just written a definition of \"%s\" card). ", + cardToDefinition.get(card), definitionToCard.get(guess)); } else { - System.out.printf("Wrong answer (the correct one is \"%s\").", definitions[i]); + System.out + .printf("Wrong answer (the correct one is \"%s\").", cardToDefinition.get(card)); } } } From 12bfba94eaab2e81dd797182acf6ff41ec3812fc Mon Sep 17 00:00:00 2001 From: oleksii Date: Thu, 13 Dec 2018 23:57:55 +0200 Subject: [PATCH 3/5] part five implemented --- src/flashcards/Main.java | 137 ++++++++++++++++++++++++++++++++------- 1 file changed, 113 insertions(+), 24 deletions(-) diff --git a/src/flashcards/Main.java b/src/flashcards/Main.java index 4baae13..8385f75 100644 --- a/src/flashcards/Main.java +++ b/src/flashcards/Main.java @@ -1,44 +1,133 @@ package flashcards; -import java.util.HashMap; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Map.Entry; import java.util.Scanner; public class Main { + private static Map cardToDefinition = new LinkedHashMap<>(); + private static Map definitionToCard = new LinkedHashMap<>(); + public static void main(String[] args) { try (Scanner scanner = new Scanner(System.in)) { - System.out.printf("Input the number of cards:\n"); + while (true) { + System.out.println("Input the action (add, remove, import, export, ask, exit):"); - int numCards = Integer.parseInt(scanner.nextLine()); + String action = scanner.nextLine(); - Map cardToDefinition = new LinkedHashMap<>(); - Map definitionToCard = new LinkedHashMap<>(); + switch (action) { + case "add": + addCard(scanner); + break; + case "remove": + removeCard(scanner); + break; + case "import": + importCard(scanner); + break; + case "export": + exportCard(scanner); + break; + case "ask": + askCard(scanner); + break; + case "exit": + System.out.println("Bye bye!"); + return; + } + } + } + } - for (int i = 0; i < numCards; i++) { - System.out.printf("The card #%d:\n", i + 1); - String card = scanner.nextLine(); - System.out.printf("The definition of the card #%d:\n", i + 1); - String definition = scanner.nextLine(); - cardToDefinition.put(card, definition); - definitionToCard.put(definition, card); + private static void askCard(Scanner scanner) { + System.out.println("How many times to ask?"); + int n = Integer.parseInt(scanner.nextLine()); + for (String card : cardToDefinition.keySet()) { + if (n <= 0) { + break; } + System.out.printf("Print the definition of \"%s\":\n", card); + String guess = scanner.nextLine(); + if (definitionToCard.containsKey(guess) && cardToDefinition.get(card).equals(guess)) { + System.out.printf("Correct answer.\n"); + } else if (definitionToCard.containsKey(guess)) { + System.out.printf( + "Wrong answer (the correct one is \"%s\", you've just written a definition of \"%s\" card).\n", + cardToDefinition.get(card), definitionToCard.get(guess)); + } else { + System.out + .printf("Wrong answer (the correct one is \"%s\").\n", cardToDefinition.get(card)); + } + n--; + } + System.out.printf("\n"); + } - for (String card : cardToDefinition.keySet()) { - System.out.printf("Print the definition of \"%s\":\n", card); - String guess = scanner.nextLine(); - if (definitionToCard.containsKey(guess) && cardToDefinition.get(card).equals(guess)) { - System.out.printf("Correct answer. "); - } else if (definitionToCard.containsKey(guess)) { - System.out.printf( - "Wrong answer (the correct one is \"%s\", you've just written a definition of \"%s\" card). ", - cardToDefinition.get(card), definitionToCard.get(guess)); - } else { - System.out - .printf("Wrong answer (the correct one is \"%s\").", cardToDefinition.get(card)); + private static void exportCard(Scanner scanner) { + System.out.println("File name:"); + String fileName = scanner.nextLine(); + try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(fileName)); + PrintWriter print = new PrintWriter(writer)) { + for (Entry entry : cardToDefinition.entrySet()) { + print.printf("%s\n%s\n", entry.getKey(), entry.getValue()); + } + } catch (IOException e) { + System.out.printf("0 cards have been saved.\n\n"); + return; + } + System.out.printf("%d cards have been saved.\n\n", cardToDefinition.size()); + } + + private static void importCard(Scanner scanner) { + System.out.println("File name:"); + String fileName = scanner.nextLine(); + int count = 0; + try (BufferedReader reader = Files.newBufferedReader(Paths.get(fileName))) { + String card; + while ((card = reader.readLine()) != null) { + String def = reader.readLine(); + if (def == null) { + break; } + cardToDefinition.put(card, def); + definitionToCard.put(def, card); + count++; } + } catch (IOException e) { + System.out.printf("0 cards have been saved.\n\n"); + return; + } + System.out.printf("%d cards have been saved.\n\n", count); + } + + private static void removeCard(Scanner scanner) { + System.out.println("The card:"); + String card = scanner.nextLine(); + if (cardToDefinition.containsKey(card)) { + String def = cardToDefinition.get(card); + definitionToCard.remove(def); + cardToDefinition.remove(card); + System.out.println("The card successfully removed\n\n"); + } else { + System.out.printf("Can't remove \"%s\": there is no such card.\n\n", card); } } + + private static void addCard(Scanner scanner) { + System.out.println("The card:"); + String card = scanner.nextLine(); + System.out.println("The definition of the card:"); + String definition = scanner.nextLine(); + cardToDefinition.put(card, definition); + definitionToCard.put(definition, card); + System.out.printf("The pair (\"%s\":\"%s\") is added.\n\n", card, definition); + } } \ No newline at end of file From 386cd44fb211ab74ba9d9d5eda4313f63f27d8ca Mon Sep 17 00:00:00 2001 From: oleksii Date: Fri, 14 Dec 2018 00:55:46 +0200 Subject: [PATCH 4/5] part six implemented --- src/flashcards/Main.java | 71 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/src/flashcards/Main.java b/src/flashcards/Main.java index 8385f75..eb8e178 100644 --- a/src/flashcards/Main.java +++ b/src/flashcards/Main.java @@ -6,7 +6,11 @@ import java.io.PrintWriter; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; @@ -15,14 +19,19 @@ public class Main { private static Map cardToDefinition = new LinkedHashMap<>(); private static Map definitionToCard = new LinkedHashMap<>(); + private static List logs = new ArrayList<>(); + private static Map stats = new HashMap<>(); public static void main(String[] args) { try (Scanner scanner = new Scanner(System.in)) { while (true) { - System.out.println("Input the action (add, remove, import, export, ask, exit):"); + System.out.println( + "Input the action (add, remove, import, export, ask, exit, log, hardest card, reset stats):"); String action = scanner.nextLine(); + logs.add(action); + switch (action) { case "add": addCard(scanner); @@ -42,29 +51,82 @@ public static void main(String[] args) { case "exit": System.out.println("Bye bye!"); return; + case "log": + log(scanner); + break; + case "hardest card": + hardestCard(); + break; + case "reset stats": + resetStats(); + break; } } } } + private static void resetStats() { + stats.clear(); + System.out.printf("\n"); + } + + private static void hardestCard() { + Iterator> iterator = stats.entrySet().iterator(); + Entry maxErrors = iterator.hasNext() ? iterator.next() : null; + if (maxErrors == null) { + System.out.printf("No stats\n\n"); + return; + } + while (iterator.hasNext()) { + Entry cur = iterator.next(); + if (cur.getValue() > maxErrors.getValue()) { + maxErrors = cur; + } + } + System.out.printf("The hardest card is \"%s\". You have %d errors answering it.\n\n", + maxErrors.getKey(), maxErrors.getValue()); + } + + private static void log(Scanner scanner) { + System.out.println("File name:"); + String fileName = scanner.nextLine(); + logs.add(fileName); + try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(fileName)); + PrintWriter print = new PrintWriter(writer)) { + for (String entry : logs) { + print.printf("%s\n", entry); + } + logs.clear(); + } catch (IOException e) { + System.out.printf("The log has not been saved.\n\n"); + return; + } + System.out.printf("The log has been saved..\n\n"); + } + private static void askCard(Scanner scanner) { System.out.println("How many times to ask?"); - int n = Integer.parseInt(scanner.nextLine()); + String num = scanner.nextLine(); + logs.add(num); + int n = Integer.parseInt(num); for (String card : cardToDefinition.keySet()) { if (n <= 0) { break; } System.out.printf("Print the definition of \"%s\":\n", card); String guess = scanner.nextLine(); + logs.add(guess); if (definitionToCard.containsKey(guess) && cardToDefinition.get(card).equals(guess)) { System.out.printf("Correct answer.\n"); } else if (definitionToCard.containsKey(guess)) { System.out.printf( "Wrong answer (the correct one is \"%s\", you've just written a definition of \"%s\" card).\n", cardToDefinition.get(card), definitionToCard.get(guess)); + stats.merge(card, 1, (x, y) -> x + y); } else { System.out .printf("Wrong answer (the correct one is \"%s\").\n", cardToDefinition.get(card)); + stats.merge(card, 1, (x, y) -> x + y); } n--; } @@ -74,6 +136,7 @@ private static void askCard(Scanner scanner) { private static void exportCard(Scanner scanner) { System.out.println("File name:"); String fileName = scanner.nextLine(); + logs.add(fileName); try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(fileName)); PrintWriter print = new PrintWriter(writer)) { for (Entry entry : cardToDefinition.entrySet()) { @@ -89,6 +152,7 @@ private static void exportCard(Scanner scanner) { private static void importCard(Scanner scanner) { System.out.println("File name:"); String fileName = scanner.nextLine(); + logs.add(fileName); int count = 0; try (BufferedReader reader = Files.newBufferedReader(Paths.get(fileName))) { String card; @@ -111,6 +175,7 @@ private static void importCard(Scanner scanner) { private static void removeCard(Scanner scanner) { System.out.println("The card:"); String card = scanner.nextLine(); + logs.add(card); if (cardToDefinition.containsKey(card)) { String def = cardToDefinition.get(card); definitionToCard.remove(def); @@ -124,8 +189,10 @@ private static void removeCard(Scanner scanner) { private static void addCard(Scanner scanner) { System.out.println("The card:"); String card = scanner.nextLine(); + logs.add(card); System.out.println("The definition of the card:"); String definition = scanner.nextLine(); + logs.add(definition); cardToDefinition.put(card, definition); definitionToCard.put(definition, card); System.out.printf("The pair (\"%s\":\"%s\") is added.\n\n", card, definition); From 08f08a2f205e277db59803f039230a303804d4c0 Mon Sep 17 00:00:00 2001 From: oleksii Date: Sat, 15 Dec 2018 14:53:37 +0200 Subject: [PATCH 5/5] part seven implemented --- src/flashcards/Main.java | 53 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/src/flashcards/Main.java b/src/flashcards/Main.java index eb8e178..18adb6a 100644 --- a/src/flashcards/Main.java +++ b/src/flashcards/Main.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.io.PrintWriter; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; @@ -17,12 +18,32 @@ public class Main { + private static final String IMPORT_OPT = "-import"; + private static final String EXPORT_OPT = "-export"; + private static Map cardToDefinition = new LinkedHashMap<>(); private static Map definitionToCard = new LinkedHashMap<>(); private static List logs = new ArrayList<>(); private static Map stats = new HashMap<>(); + private static Path importPath = null; + private static Path exportPath = null; + public static void main(String[] args) { + if (args.length > 0) { + String[][] optPairs = new String[args.length / 2][2]; + int i = 0, j = 0; + while (i < args.length - 1) { + optPairs[j][0] = args[i]; + optPairs[j][1] = args[i + 1]; + i += 2; + j++; + } + assignOpts(optPairs); + } + if (importPath != null) { + importCard(importPath); + } try (Scanner scanner = new Scanner(System.in)) { while (true) { System.out.println( @@ -49,6 +70,9 @@ public static void main(String[] args) { askCard(scanner); break; case "exit": + if (exportPath != null) { + exportCard(exportPath); + } System.out.println("Bye bye!"); return; case "log": @@ -65,6 +89,19 @@ public static void main(String[] args) { } } + private static void assignOpts(String[][] optPairs) { + for (String[] opt : optPairs) { + switch (opt[0]) { + case IMPORT_OPT: + importPath = Paths.get(opt[1]); + break; + case EXPORT_OPT: + exportPath = Paths.get(opt[1]); + break; + } + } + } + private static void resetStats() { stats.clear(); System.out.printf("\n"); @@ -137,7 +174,11 @@ private static void exportCard(Scanner scanner) { System.out.println("File name:"); String fileName = scanner.nextLine(); logs.add(fileName); - try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(fileName)); + exportCard(Paths.get(fileName)); + } + + private static void exportCard(Path fileName) { + try (BufferedWriter writer = Files.newBufferedWriter(fileName); PrintWriter print = new PrintWriter(writer)) { for (Entry entry : cardToDefinition.entrySet()) { print.printf("%s\n%s\n", entry.getKey(), entry.getValue()); @@ -153,8 +194,12 @@ private static void importCard(Scanner scanner) { System.out.println("File name:"); String fileName = scanner.nextLine(); logs.add(fileName); + importCard(Paths.get(fileName)); + } + + private static void importCard(Path fileName) { int count = 0; - try (BufferedReader reader = Files.newBufferedReader(Paths.get(fileName))) { + try (BufferedReader reader = Files.newBufferedReader(fileName)) { String card; while ((card = reader.readLine()) != null) { String def = reader.readLine(); @@ -166,10 +211,10 @@ private static void importCard(Scanner scanner) { count++; } } catch (IOException e) { - System.out.printf("0 cards have been saved.\n\n"); + System.out.printf("0 cards have been read.\n\n"); return; } - System.out.printf("%d cards have been saved.\n\n", count); + System.out.printf("%d cards have been read.\n\n", count); } private static void removeCard(Scanner scanner) {