From ce54cf85303aef6a4eb3d22ad1ff33b67080d7ad Mon Sep 17 00:00:00 2001 From: AIexMoran Date: Sat, 1 Dec 2018 15:09:12 +0300 Subject: [PATCH 1/5] First version with two massive of Strings --- .idea/misc.xml | 2 +- src/flashcards/Main.java | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index a165cb3..0c4841a 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..72947e0 100644 --- a/src/flashcards/Main.java +++ b/src/flashcards/Main.java @@ -1,7 +1,28 @@ package flashcards; +import java.util.Scanner; + public class Main { public static void main(String[] args) { - System.out.print("Hello world!"); + Scanner scn = new Scanner(System.in); + System.out.println("Input the number of cards: "); + int num = scn.nextInt(); + String[] cards = new String[num]; + String[] definitions = new String[num]; + for (int i = 0; i < num; i++) { + System.out.println("The card #" + (i + 1) + ":"); + cards[i] = scn.next(); + System.out.println("The definition of the card #" + + (i + 1) + ":"); + definitions[i] = scn.next(); + } + for (int i = 0; i < num; i++) { + System.out.println("Print the definition of \"" + cards[i] + "\":"); + String answer = scn.next(); + if (answer.equals(definitions[i])) { + System.out.print("Correct answer. "); + } else { + System.out.println("Wrong answer (the correct one is \"" + definitions[i] + "\")."); + } + } } } \ No newline at end of file From e52c518f0b80cd64bf2b4e9fb7641c21dc989e15 Mon Sep 17 00:00:00 2001 From: AIexMoran Date: Sun, 2 Dec 2018 21:41:38 +0300 Subject: [PATCH 2/5] Second version with LinkedHashMap --- src/flashcards/Main.java | 63 +++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 17 deletions(-) diff --git a/src/flashcards/Main.java b/src/flashcards/Main.java index 72947e0..5fa59c1 100644 --- a/src/flashcards/Main.java +++ b/src/flashcards/Main.java @@ -1,28 +1,57 @@ package flashcards; -import java.util.Scanner; +import java.util.*; public class Main { + + private static Scanner scn = new Scanner(System.in); + private static Map cardsMap = new LinkedHashMap<>(); + + public static void main(String[] args) { - Scanner scn = new Scanner(System.in); + getCardsAndDefinition(); + checksUserInput(); + } + + private static void checksUserInput() { + String answer; + for (Map.Entry card : cardsMap.entrySet()) { + System.out.println("Print the definition of \"" + card.getKey() + "\""); + answer = scn.nextLine(); + if (answer.equals(card.getValue())) { + System.out.println("Correct answer."); + } else if (cardsMap.containsValue(answer)) { + for (Map.Entry secondCard : cardsMap.entrySet()) { + if (secondCard.getValue().equals(answer)) { + System.out.println("Wrong answer (the correct one is \"" + card.getValue() + "\", " + + "you've just written a definition of \"" + secondCard.getKey() + "\" card)."); + } + } + } else { + System.out.println("Wrong answer (the correct one is \"" + card.getValue() + "\")."); + } + } + } + + private static void getCardsAndDefinition() { System.out.println("Input the number of cards: "); int num = scn.nextInt(); - String[] cards = new String[num]; - String[] definitions = new String[num]; + scn = new Scanner(System.in); for (int i = 0; i < num; i++) { - System.out.println("The card #" + (i + 1) + ":"); - cards[i] = scn.next(); - System.out.println("The definition of the card #" + + (i + 1) + ":"); - definitions[i] = scn.next(); - } - for (int i = 0; i < num; i++) { - System.out.println("Print the definition of \"" + cards[i] + "\":"); - String answer = scn.next(); - if (answer.equals(definitions[i])) { - System.out.print("Correct answer. "); - } else { - System.out.println("Wrong answer (the correct one is \"" + definitions[i] + "\")."); - } + String card; + do { + System.out.println("The card #" + (i + 1) + ":"); + card = scn.nextLine(); + if (cardsMap.containsKey(card)) { + System.out.println("This card is exist"); + } else { + System.out.println("The definition of the card #" + + (i + 1) + ":"); + String definition = scn.nextLine(); + cardsMap.put(card, definition); + break; + } + } while (cardsMap.containsKey(card)); } } + } \ No newline at end of file From 855c343dbfe9f7150d029a8f25531d836d3c49f4 Mon Sep 17 00:00:00 2001 From: AIexMoran Date: Tue, 4 Dec 2018 00:22:35 +0300 Subject: [PATCH 3/5] FlashCards with files and commands --- src/flashcards/Main.java | 118 ++++++++++++++++++++++++++++++++------- 1 file changed, 97 insertions(+), 21 deletions(-) diff --git a/src/flashcards/Main.java b/src/flashcards/Main.java index 5fa59c1..7ebb3a3 100644 --- a/src/flashcards/Main.java +++ b/src/flashcards/Main.java @@ -1,21 +1,49 @@ package flashcards; import java.util.*; +import java.io.*; public class Main { private static Scanner scn = new Scanner(System.in); private static Map cardsMap = new LinkedHashMap<>(); - public static void main(String[] args) { - getCardsAndDefinition(); - checksUserInput(); + String command = ""; + do { + System.out.println("Input the action (add, remove, import, export, ask, exit):"); + command = scn.next(); + switch (command) { + case "import": + importCmd(); + break; + case "add": + addCmd(); + break; + case "remove": + removeCmd(); + break; + case "export": + exportCmd(); + break; + case "ask": + askCmd(); + break; + case "print": + System.out.println(cardsMap); + } + } while (!command.equals("exit")); } - private static void checksUserInput() { + private static void askCmd() { + scn = new Scanner(System.in); String answer; + System.out.println("How many times to ask?"); + int count = scn.nextInt(); + int i = 0; + scn = new Scanner(System.in); for (Map.Entry card : cardsMap.entrySet()) { + i++; System.out.println("Print the definition of \"" + card.getKey() + "\""); answer = scn.nextLine(); if (answer.equals(card.getValue())) { @@ -30,27 +58,75 @@ private static void checksUserInput() { } else { System.out.println("Wrong answer (the correct one is \"" + card.getValue() + "\")."); } + if (count == i) { + break; + } } } - private static void getCardsAndDefinition() { - System.out.println("Input the number of cards: "); - int num = scn.nextInt(); + private static void exportCmd() { scn = new Scanner(System.in); - for (int i = 0; i < num; i++) { - String card; - do { - System.out.println("The card #" + (i + 1) + ":"); - card = scn.nextLine(); - if (cardsMap.containsKey(card)) { - System.out.println("This card is exist"); - } else { - System.out.println("The definition of the card #" + + (i + 1) + ":"); - String definition = scn.nextLine(); - cardsMap.put(card, definition); - break; - } - } while (cardsMap.containsKey(card)); + System.out.println("File name:"); + String fileName = scn.nextLine(); + File file = new File(fileName); + try (FileWriter printWriter = new FileWriter(file)) { + if (!file.exists()) { + file.createNewFile(); + } + for (Map.Entry card : cardsMap.entrySet()) { + printWriter.write(card.getKey() + "\n"); + printWriter.write(card.getValue() + "\n"); + printWriter.flush(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + + private static void importCmd() { + scn = new Scanner(System.in); + System.out.println("File name:"); + String fileName = scn.nextLine(); + File file = new File(fileName); + int count = 0; + try (Scanner scn = new Scanner(file)) { + while (scn.hasNextLine()) { + count++; + cardsMap.put(scn.nextLine(), scn.nextLine()); + } + } catch (IOException e) { + e.printStackTrace(); + } + System.out.println(count + " cards have been loaded."); + } + + private static void addCmd() { + scn = new Scanner(System.in); + System.out.println("The card:"); + String card = ""; + while (true) { + card = scn.nextLine(); + if (!cardsMap.containsKey(card)) { + break; + } + System.out.println("Cant add. The card is exist."); + } + System.out.println("The definition of the card:"); + String definition = scn.nextLine(); + cardsMap.put(card, definition); + System.out.println("The pair (\"" + card + "\":\"" + definition + "\") is added."); + + } + + private static void removeCmd() { + scn = new Scanner(System.in); + System.out.println("The card:"); + String card = scn.nextLine(); + if (cardsMap.containsKey(card)) { + cardsMap.remove(card); + } else { + System.out.println("Can't remove \"" + card + "\": there is no such card.\n"); } } From 5a7e27ce0374cbc0952d18f9532ed469f4f43f3b Mon Sep 17 00:00:00 2001 From: AIexMoran Date: Sun, 9 Dec 2018 18:45:35 +0300 Subject: [PATCH 4/5] Added "log", "hardest card", "reset stats" --- src/flashcards/Main.java | 76 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 2 deletions(-) diff --git a/src/flashcards/Main.java b/src/flashcards/Main.java index 7ebb3a3..50214f7 100644 --- a/src/flashcards/Main.java +++ b/src/flashcards/Main.java @@ -7,12 +7,13 @@ public class Main { private static Scanner scn = new Scanner(System.in); private static Map cardsMap = new LinkedHashMap<>(); + private static Map errorsMap = new HashMap<>(); public static void main(String[] args) { String command = ""; do { - System.out.println("Input the action (add, remove, import, export, ask, exit):"); - command = scn.next(); + System.out.println("Input the action (add, remove, import, export, ask, exit, log, hardest card, reset stats):"); + command = scn.nextLine(); switch (command) { case "import": importCmd(); @@ -29,12 +30,71 @@ public static void main(String[] args) { case "ask": askCmd(); break; + case "log": + log(); + break; + case "hardest card": + hardestCard(); + break; + case "reset stats": + resetStats(); + break; case "print": System.out.println(cardsMap); } } while (!command.equals("exit")); } + private static void resetStats() { + errorsMap = new HashMap<>(); + } + + private static void hardestCard() { + scn = new Scanner(System.in); + System.out.println("File name:"); + String fileName = scn.nextLine(); + File file = new File(fileName); + Map tmpMap = new HashMap<>(); + try (Scanner scn = new Scanner(file)) { + while (scn.hasNextLine()) { + tmpMap.put(scn.nextLine(), Integer.parseInt(scn.nextLine())); + } + } catch (IOException e) { + e.printStackTrace(); + } + String hardestCard = ""; + int errors = 0; + int tmpEr = 0; + for (Map.Entry error : tmpMap.entrySet()) { + tmpEr = error.getValue(); + if (errors < tmpEr) { + errors = tmpEr; + hardestCard = error.getKey(); + } + } + System.out.println("The hardest card is " + hardestCard + ". You have " + errors + " errors answering it."); + } + + private static void log() { + scn = new Scanner(System.in); + System.out.println("File name:"); + String fileName = scn.nextLine(); + File file = new File(fileName); + try (FileWriter printWriter = new FileWriter(file)) { + if (!file.exists()) { + file.createNewFile(); + } + for (Map.Entry card : errorsMap.entrySet()) { + printWriter.write(card.getKey() + "\n"); + printWriter.write(card.getValue() + "\n"); + printWriter.flush(); + } + } catch (IOException e) { + e.printStackTrace(); + } + System.out.println("The log has been saved"); + } + private static void askCmd() { scn = new Scanner(System.in); String answer; @@ -55,8 +115,20 @@ private static void askCmd() { "you've just written a definition of \"" + secondCard.getKey() + "\" card)."); } } + if (!errorsMap.containsKey(card.getKey())) { + errorsMap.put(card.getKey(), 1); + } else { + int errors = errorsMap.get(card.getKey()); + errorsMap.put(card.getKey(), errors + 1); + } } else { System.out.println("Wrong answer (the correct one is \"" + card.getValue() + "\")."); + if (!errorsMap.containsKey(card.getKey())) { + errorsMap.put(card.getKey(), 1); + } else { + int errors = errorsMap.get(card.getKey()); + errorsMap.put(card.getKey(), errors + 1); + } } if (count == i) { break; From 084d65604712fddce3735d7c888600a2bc18c60b Mon Sep 17 00:00:00 2001 From: AIexMoran Date: Sun, 9 Dec 2018 20:38:53 +0300 Subject: [PATCH 5/5] Added args to program "-import", "-export" --- src/flashcards/Main.java | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/flashcards/Main.java b/src/flashcards/Main.java index 50214f7..5a294b4 100644 --- a/src/flashcards/Main.java +++ b/src/flashcards/Main.java @@ -8,25 +8,35 @@ public class Main { private static Scanner scn = new Scanner(System.in); private static Map cardsMap = new LinkedHashMap<>(); private static Map errorsMap = new HashMap<>(); + private static String exportFileName; public static void main(String[] args) { + if (args.length > 0) { + for (int i = 0; i < args.length; i += 2) { + switch (args[i]) { + case "-import": + importCmd(args[i + 1]); + break; + case "-export": + exportFileName = args[i + 1]; + break; + } + } + } else { + System.out.println("The program must have 2 or more args"); + return; + } String command = ""; do { - System.out.println("Input the action (add, remove, import, export, ask, exit, log, hardest card, reset stats):"); + System.out.println("Input the action (add, remove, ask, exit, log, hardest card, reset stats):"); command = scn.nextLine(); switch (command) { - case "import": - importCmd(); - break; case "add": addCmd(); break; case "remove": removeCmd(); break; - case "export": - exportCmd(); - break; case "ask": askCmd(); break; @@ -43,6 +53,7 @@ public static void main(String[] args) { System.out.println(cardsMap); } } while (!command.equals("exit")); + exportCmd(); } private static void resetStats() { @@ -137,9 +148,7 @@ private static void askCmd() { } private static void exportCmd() { - scn = new Scanner(System.in); - System.out.println("File name:"); - String fileName = scn.nextLine(); + String fileName = exportFileName; File file = new File(fileName); try (FileWriter printWriter = new FileWriter(file)) { if (!file.exists()) { @@ -156,10 +165,8 @@ private static void exportCmd() { } - private static void importCmd() { - scn = new Scanner(System.in); - System.out.println("File name:"); - String fileName = scn.nextLine(); + private static void importCmd(String nameFile) { + String fileName = nameFile; File file = new File(fileName); int count = 0; try (Scanner scn = new Scanner(file)) {