From 968ecdd57af7f0177643d87c549d9d16f301d8b9 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 10 Jul 2021 18:18:11 +0300 Subject: [PATCH 01/63] homework 1 --- src/main/java/homework_1/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/homework_1/Main.java b/src/main/java/homework_1/Main.java index 07c029a2..62d654c4 100644 --- a/src/main/java/homework_1/Main.java +++ b/src/main/java/homework_1/Main.java @@ -5,5 +5,5 @@ public class Main { public static void main(String[] args) { System.out.println("Hello homework!"); } - + 11 } From c87c2cfec63207cf3502038d6d756700f093d153 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 10 Jul 2021 18:19:18 +0300 Subject: [PATCH 02/63] homework 1 --- src/main/java/homework_1/Main.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/homework_1/Main.java b/src/main/java/homework_1/Main.java index 62d654c4..6ce178ce 100644 --- a/src/main/java/homework_1/Main.java +++ b/src/main/java/homework_1/Main.java @@ -1,9 +1,16 @@ package homework_1; public class Main { + public static final String ANSI_RED = "\u001B[31m"; + public static final String ANSI_RESET = "\u001B[0m"; - public static void main(String[] args) { - System.out.println("Hello homework!"); - } - 11 -} + public static void main(String[] args) { + for (String arg : args) { + if ("error".equalsIgnoreCase(arg) || "ошибка".equalsIgnoreCase(arg)) { + System.out.println(ANSI_RED + "Alarm!" + ANSI_RESET); + break; + } + System.out.println(arg + ": " + arg.length() + " letter(s)"); + } + } +} \ No newline at end of file From b28db62c037e6a174a99008a134910b4467d8d82 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 10 Jul 2021 18:40:50 +0300 Subject: [PATCH 03/63] homework 1 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5d686e9f..81768668 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Java Core June 2021 -## *Nikolaev Artem* +## *Rog Elena* | Number | Solution | Short description | --- | --- | --- | -| HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/master/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | +| HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) From eca987a099e9a58ee9eeae5b23074d363cac41c1 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 10 Jul 2021 18:41:35 +0300 Subject: [PATCH 04/63] Revert "homework 1" This reverts commit b28db62c --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 81768668..5d686e9f 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Java Core June 2021 -## *Rog Elena* +## *Nikolaev Artem* | Number | Solution | Short description | --- | --- | --- | -| HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | +| HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/master/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) From 185a73d5e860cf71f65f7fa27378f451e0e69e36 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 10 Jul 2021 18:43:06 +0300 Subject: [PATCH 05/63] homework 1 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5d686e9f..81768668 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Java Core June 2021 -## *Nikolaev Artem* +## *Rog Elena* | Number | Solution | Short description | --- | --- | --- | -| HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/master/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | +| HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) From fd89188e0a32c374134aa7fd8dd567a72650718f Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 10 Jul 2021 20:43:28 +0300 Subject: [PATCH 06/63] homework 1 --- src/main/java/homework_1/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/homework_1/Main.java b/src/main/java/homework_1/Main.java index 6ce178ce..77868e48 100644 --- a/src/main/java/homework_1/Main.java +++ b/src/main/java/homework_1/Main.java @@ -6,7 +6,7 @@ public class Main { public static void main(String[] args) { for (String arg : args) { - if ("error".equalsIgnoreCase(arg) || "ошибка".equalsIgnoreCase(arg)) { + if ("error".equalsIgnoreCase(arg)) { System.out.println(ANSI_RED + "Alarm!" + ANSI_RESET); break; } From 4f1ae88d9593f771f9b4f5e2c22709399539c576 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 19 Jul 2021 16:44:26 +0300 Subject: [PATCH 07/63] homework 2 --- .../java/homework_2/trafficLight/Main.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/main/java/homework_2/trafficLight/Main.java diff --git a/src/main/java/homework_2/trafficLight/Main.java b/src/main/java/homework_2/trafficLight/Main.java new file mode 100644 index 00000000..63030b9e --- /dev/null +++ b/src/main/java/homework_2/trafficLight/Main.java @@ -0,0 +1,39 @@ +package homework_2.trafficLight; + +import java.util.Scanner; + +public class Main { + private static Integer second; + + public static void main(String[] args) { + Scanner in = new Scanner(System.in); + while (in.hasNextLine()) { + if("".equals(in.nextLine())) + break; + String result = parserInt(in.nextLine()); + System.out.println(result); + } + } + + private static String parserInt(String str) { + second = null; + try { + second = Integer.parseInt(str); + if (second < 0) + return "Error! Only positive!"; + else if (second >= 86400) + return "Error! Day is over!"; + else { + second = second % 60; + if (second < 35) + return "green"; + else if (second >= 40 && second < 55) + return "red"; + else // second >= 35 && second < 40 || second >= 55 && second < 60 + return "yellow"; + } + } catch (NumberFormatException e) { + return "Error! Only numbers!"; + } + } +} \ No newline at end of file From eb7c43e2b0020878110abcef4d4d1db20876d816 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 21 Jul 2021 16:49:04 +0300 Subject: [PATCH 08/63] homework 2 --- README.md | 2 + .../java/homework_2/pyramid_printer/Main.java | 8 ++ .../pyramid_printer/PyramidPrinter.java | 34 ++++++++ .../homework_2/random_chars_table/Main.java | 7 ++ .../random_chars_table/RandomCharsTable.java | 36 ++++++++ .../java/homework_2/trafficLight/Main.java | 39 --------- .../java/homework_2/traffic_light/Main.java | 8 ++ .../traffic_light/TrafficLight.java | 82 +++++++++++++++++++ 8 files changed, 177 insertions(+), 39 deletions(-) create mode 100644 src/main/java/homework_2/pyramid_printer/Main.java create mode 100644 src/main/java/homework_2/pyramid_printer/PyramidPrinter.java create mode 100644 src/main/java/homework_2/random_chars_table/Main.java create mode 100644 src/main/java/homework_2/random_chars_table/RandomCharsTable.java delete mode 100644 src/main/java/homework_2/trafficLight/Main.java create mode 100644 src/main/java/homework_2/traffic_light/Main.java create mode 100644 src/main/java/homework_2/traffic_light/TrafficLight.java diff --git a/README.md b/README.md index 81768668..ae7e3d48 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,5 @@ | HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) + +[Link to codingbat profile](https://codingbat.com/done?user=rog.elena.yu@gmail.com&tag=9660623200) \ No newline at end of file diff --git a/src/main/java/homework_2/pyramid_printer/Main.java b/src/main/java/homework_2/pyramid_printer/Main.java new file mode 100644 index 00000000..905192d7 --- /dev/null +++ b/src/main/java/homework_2/pyramid_printer/Main.java @@ -0,0 +1,8 @@ +package homework_2.pyramid_printer; + +public class Main { + + public static void main(String[] args) { + new PyramidPrinter().run(); + } +} \ No newline at end of file diff --git a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java new file mode 100644 index 00000000..9dd80883 --- /dev/null +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -0,0 +1,34 @@ +package homework_2.pyramid_printer; + +import java.util.InputMismatchException; +import java.util.Scanner; + +class PyramidPrinter { + + public void run() { + + Scanner in = new Scanner(System.in); + try { + int number = in.nextInt(); + in.close(); + StringBuilder result = new StringBuilder(); + char x = 'x'; + char cr = 13; + int i = 0; + int j; + while (i < number) { + j = 0; + while (j <= i) { + result.append(x); + j++; + } + result.append(cr); + i++; + System.out.println(result); + } + } catch ( + InputMismatchException e) { + System.out.println("Error! Only numbers!"); + } + } +} \ No newline at end of file diff --git a/src/main/java/homework_2/random_chars_table/Main.java b/src/main/java/homework_2/random_chars_table/Main.java new file mode 100644 index 00000000..bdb56ffe --- /dev/null +++ b/src/main/java/homework_2/random_chars_table/Main.java @@ -0,0 +1,7 @@ +package homework_2.random_chars_table; + +public class Main { + public static void main(String[] args) { + new RandomCharsTable().run(); + } +} \ No newline at end of file diff --git a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java new file mode 100644 index 00000000..63f7bae6 --- /dev/null +++ b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java @@ -0,0 +1,36 @@ +package homework_2.random_chars_table; + +import java.util.InputMismatchException; +import java.util.Scanner; + +public class RandomCharsTable { + + public void run() { + int length; + int width; + /* enum strategy { + EVEN, + ODD + };*/ + int[][] table; + table = new int[3][4]; + + Scanner in = new Scanner(System.in); + String[] arr = in.nextLine().trim().split("\\s"); + in.close(); + if (arr.length < 3) { + System.out.println("Error! Not all data entered!"); + return; + } + try { + length = Integer.parseInt(arr[0]); + width = Integer.parseInt(arr[1]); + /* if (strategy.EVEN != strategy.valueOf(arr[2]) && strategy.ODD != strategy.valueOf(arr[2])) { + + }*/ + + } catch (InputMismatchException e) { + System.out.println("Error! Only numbers!"); + } + } +} diff --git a/src/main/java/homework_2/trafficLight/Main.java b/src/main/java/homework_2/trafficLight/Main.java deleted file mode 100644 index 63030b9e..00000000 --- a/src/main/java/homework_2/trafficLight/Main.java +++ /dev/null @@ -1,39 +0,0 @@ -package homework_2.trafficLight; - -import java.util.Scanner; - -public class Main { - private static Integer second; - - public static void main(String[] args) { - Scanner in = new Scanner(System.in); - while (in.hasNextLine()) { - if("".equals(in.nextLine())) - break; - String result = parserInt(in.nextLine()); - System.out.println(result); - } - } - - private static String parserInt(String str) { - second = null; - try { - second = Integer.parseInt(str); - if (second < 0) - return "Error! Only positive!"; - else if (second >= 86400) - return "Error! Day is over!"; - else { - second = second % 60; - if (second < 35) - return "green"; - else if (second >= 40 && second < 55) - return "red"; - else // second >= 35 && second < 40 || second >= 55 && second < 60 - return "yellow"; - } - } catch (NumberFormatException e) { - return "Error! Only numbers!"; - } - } -} \ No newline at end of file diff --git a/src/main/java/homework_2/traffic_light/Main.java b/src/main/java/homework_2/traffic_light/Main.java new file mode 100644 index 00000000..26c16963 --- /dev/null +++ b/src/main/java/homework_2/traffic_light/Main.java @@ -0,0 +1,8 @@ +package homework_2.traffic_light; + +public class Main { + + public static void main(String[] args) { + new TrafficLight().run(); + } +} \ No newline at end of file diff --git a/src/main/java/homework_2/traffic_light/TrafficLight.java b/src/main/java/homework_2/traffic_light/TrafficLight.java new file mode 100644 index 00000000..c01962a7 --- /dev/null +++ b/src/main/java/homework_2/traffic_light/TrafficLight.java @@ -0,0 +1,82 @@ +package homework_2.traffic_light; + +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +class TrafficLight { + + public static enum Colour { + RED, + YELLOW, + GREEN + } + public static Map coloursForPrinting = new HashMap(); + private Colour trafficLightColour; + + static { + coloursForPrinting.put(Colour.RED, "\u001B[31m"); + coloursForPrinting.put(Colour.YELLOW, "\u001B[33m"); + coloursForPrinting.put(Colour.GREEN, "\u001B[32m"); + } + public void run() { + + Scanner scanner = new Scanner(System.in); + String str = scanner.nextLine(); + scanner.close(); + try { + int seconds = Integer.parseInt(str); + try { + this.setTrafficLightColour(seconds); + printColour(); + } + catch (WrongSecondsException e) { + System.out.println(e.getMessage()); + } + } catch (NumberFormatException ex) { + System.out.println("Error! Only numbers!"); + } + } + + public void setTrafficLightColour(int seconds) throws WrongSecondsException { + if (seconds < 0) + throw new WrongSecondsException("Error! Only positive!"); + else if (seconds >= 86400) + throw new WrongSecondsException("Error! Day is over!"); + else { + int secondsRemainder = seconds % 60; + if (secondsRemainder < 35) + this.setTrafficLightColour(Colour.GREEN); + else if (secondsRemainder >= 40 && secondsRemainder < 55) + this.setTrafficLightColour(Colour.RED); + else // (secondsRemainder >= 35 && secondsRemainder < 40) + // || (secondsRemainder >= 55 && secondsRemainder < 60) + this.setTrafficLightColour(Colour.YELLOW); + } + } + + class WrongSecondsException extends Exception { + + WrongSecondsException() { + } + + WrongSecondsException(String msg) { + super(msg); + } + } + + public void setTrafficLightColour(Colour colour) { + this.trafficLightColour = colour; + } + + public void printColour() { + final String ANSI_RESET = "\u001B[0m"; + Colour currentColour = this.getTrafficLightColour(); + + System.out.println(coloursForPrinting.get(currentColour) + currentColour + ANSI_RESET); + } + + public Colour getTrafficLightColour() { + return this.trafficLightColour; + } +} \ No newline at end of file From e5f7d55bc6b23d30c24c60ce34ca1c8a16b3da04 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 21 Jul 2021 16:52:07 +0300 Subject: [PATCH 09/63] homework 2 --- src/main/java/homework_2/traffic_light/TrafficLight.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/homework_2/traffic_light/TrafficLight.java b/src/main/java/homework_2/traffic_light/TrafficLight.java index c01962a7..5c28a0f8 100644 --- a/src/main/java/homework_2/traffic_light/TrafficLight.java +++ b/src/main/java/homework_2/traffic_light/TrafficLight.java @@ -19,6 +19,7 @@ public static enum Colour { coloursForPrinting.put(Colour.YELLOW, "\u001B[33m"); coloursForPrinting.put(Colour.GREEN, "\u001B[32m"); } + public void run() { Scanner scanner = new Scanner(System.in); From 725e7c9036c69a201b2daa5f1551f42c0db355ad Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 21 Jul 2021 19:42:40 +0300 Subject: [PATCH 10/63] homework 2 --- .../pyramid_printer_test}/Main.java | 2 +- .../pyramid_printer_test}/PyramidPrinter.java | 2 +- .../random_chars_table_test}/Main.java | 2 +- .../RandomCharsTable.java | 2 +- .../traffic_light_tests}/Main.java | 2 +- .../traffic_light_tests}/TrafficLight.java | 2 +- .../pyramid_printer_test/MainTest.java | 8 ++ .../PyramidPrinterTest.java | 39 ++++++++ .../random_chars_table_test/MainTest.java | 7 ++ .../RandomCharsTableTest.java | 36 ++++++++ .../traffic_light_tests/MainTest.java | 8 ++ .../traffic_light_tests/TrafficLightTest.java | 89 +++++++++++++++++++ 12 files changed, 193 insertions(+), 6 deletions(-) rename src/main/java/{homework_2/pyramid_printer => homework_2_tests/pyramid_printer_test}/Main.java (70%) rename src/main/java/{homework_2/pyramid_printer => homework_2_tests/pyramid_printer_test}/PyramidPrinter.java (94%) rename src/main/java/{homework_2/random_chars_table => homework_2_tests/random_chars_table_test}/Main.java (68%) rename src/main/java/{homework_2/random_chars_table => homework_2_tests/random_chars_table_test}/RandomCharsTable.java (94%) rename src/main/java/{homework_2/traffic_light => homework_2_tests/traffic_light_tests}/Main.java (70%) rename src/main/java/{homework_2/traffic_light => homework_2_tests/traffic_light_tests}/TrafficLight.java (98%) create mode 100644 src/test/java/homework_2_tests/pyramid_printer_test/MainTest.java create mode 100644 src/test/java/homework_2_tests/pyramid_printer_test/PyramidPrinterTest.java create mode 100644 src/test/java/homework_2_tests/random_chars_table_test/MainTest.java create mode 100644 src/test/java/homework_2_tests/random_chars_table_test/RandomCharsTableTest.java create mode 100644 src/test/java/homework_2_tests/traffic_light_tests/MainTest.java create mode 100644 src/test/java/homework_2_tests/traffic_light_tests/TrafficLightTest.java diff --git a/src/main/java/homework_2/pyramid_printer/Main.java b/src/main/java/homework_2_tests/pyramid_printer_test/Main.java similarity index 70% rename from src/main/java/homework_2/pyramid_printer/Main.java rename to src/main/java/homework_2_tests/pyramid_printer_test/Main.java index 905192d7..8710cc73 100644 --- a/src/main/java/homework_2/pyramid_printer/Main.java +++ b/src/main/java/homework_2_tests/pyramid_printer_test/Main.java @@ -1,4 +1,4 @@ -package homework_2.pyramid_printer; +package homework_2_tests.pyramid_printer_test; public class Main { diff --git a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java b/src/main/java/homework_2_tests/pyramid_printer_test/PyramidPrinter.java similarity index 94% rename from src/main/java/homework_2/pyramid_printer/PyramidPrinter.java rename to src/main/java/homework_2_tests/pyramid_printer_test/PyramidPrinter.java index 9dd80883..cd090130 100644 --- a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java +++ b/src/main/java/homework_2_tests/pyramid_printer_test/PyramidPrinter.java @@ -1,4 +1,4 @@ -package homework_2.pyramid_printer; +package homework_2_tests.pyramid_printer_test; import java.util.InputMismatchException; import java.util.Scanner; diff --git a/src/main/java/homework_2/random_chars_table/Main.java b/src/main/java/homework_2_tests/random_chars_table_test/Main.java similarity index 68% rename from src/main/java/homework_2/random_chars_table/Main.java rename to src/main/java/homework_2_tests/random_chars_table_test/Main.java index bdb56ffe..b5b1cc6d 100644 --- a/src/main/java/homework_2/random_chars_table/Main.java +++ b/src/main/java/homework_2_tests/random_chars_table_test/Main.java @@ -1,4 +1,4 @@ -package homework_2.random_chars_table; +package homework_2_tests.random_chars_table_test; public class Main { public static void main(String[] args) { diff --git a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java b/src/main/java/homework_2_tests/random_chars_table_test/RandomCharsTable.java similarity index 94% rename from src/main/java/homework_2/random_chars_table/RandomCharsTable.java rename to src/main/java/homework_2_tests/random_chars_table_test/RandomCharsTable.java index 63f7bae6..ca5fc608 100644 --- a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java +++ b/src/main/java/homework_2_tests/random_chars_table_test/RandomCharsTable.java @@ -1,4 +1,4 @@ -package homework_2.random_chars_table; +package homework_2_tests.random_chars_table_test; import java.util.InputMismatchException; import java.util.Scanner; diff --git a/src/main/java/homework_2/traffic_light/Main.java b/src/main/java/homework_2_tests/traffic_light_tests/Main.java similarity index 70% rename from src/main/java/homework_2/traffic_light/Main.java rename to src/main/java/homework_2_tests/traffic_light_tests/Main.java index 26c16963..69ddb1d3 100644 --- a/src/main/java/homework_2/traffic_light/Main.java +++ b/src/main/java/homework_2_tests/traffic_light_tests/Main.java @@ -1,4 +1,4 @@ -package homework_2.traffic_light; +package homework_2_tests.traffic_light_tests; public class Main { diff --git a/src/main/java/homework_2/traffic_light/TrafficLight.java b/src/main/java/homework_2_tests/traffic_light_tests/TrafficLight.java similarity index 98% rename from src/main/java/homework_2/traffic_light/TrafficLight.java rename to src/main/java/homework_2_tests/traffic_light_tests/TrafficLight.java index 5c28a0f8..ae851520 100644 --- a/src/main/java/homework_2/traffic_light/TrafficLight.java +++ b/src/main/java/homework_2_tests/traffic_light_tests/TrafficLight.java @@ -1,4 +1,4 @@ -package homework_2.traffic_light; +package homework_2_tests.traffic_light_tests; import java.util.HashMap; import java.util.Map; diff --git a/src/test/java/homework_2_tests/pyramid_printer_test/MainTest.java b/src/test/java/homework_2_tests/pyramid_printer_test/MainTest.java new file mode 100644 index 00000000..645b0943 --- /dev/null +++ b/src/test/java/homework_2_tests/pyramid_printer_test/MainTest.java @@ -0,0 +1,8 @@ +package homework_2_tests.pyramid_printer_test; + +public class MainTest { + + public static void main(String[] args) { + new PyramidPrinterTest().run(); + } +} \ No newline at end of file diff --git a/src/test/java/homework_2_tests/pyramid_printer_test/PyramidPrinterTest.java b/src/test/java/homework_2_tests/pyramid_printer_test/PyramidPrinterTest.java new file mode 100644 index 00000000..c896e412 --- /dev/null +++ b/src/test/java/homework_2_tests/pyramid_printer_test/PyramidPrinterTest.java @@ -0,0 +1,39 @@ +package homework_2_tests.pyramid_printer_test; + +import org.junit.jupiter.api.Test; + +import java.util.InputMismatchException; +import java.util.Scanner; + +public class PyramidPrinterTest { +@Test +void test() { +final String actual = new +} + public void run() { + + Scanner in = new Scanner(System.in); + try { + int number = in.nextInt(); + in.close(); + StringBuilder result = new StringBuilder(); + char x = 'x'; + char cr = 13; + int i = 0; + int j; + while (i < number) { + j = 0; + while (j <= i) { + result.append(x); + j++; + } + result.append(cr); + i++; + System.out.println(result); + } + } catch ( + InputMismatchException e) { + System.out.println("Error! Only numbers!"); + } + } +} \ No newline at end of file diff --git a/src/test/java/homework_2_tests/random_chars_table_test/MainTest.java b/src/test/java/homework_2_tests/random_chars_table_test/MainTest.java new file mode 100644 index 00000000..69173674 --- /dev/null +++ b/src/test/java/homework_2_tests/random_chars_table_test/MainTest.java @@ -0,0 +1,7 @@ +package homework_2_tests.random_chars_table_test; + +public class MainTest { + public static void main(String[] args) { + new RandomCharsTableTest().run(); + } +} \ No newline at end of file diff --git a/src/test/java/homework_2_tests/random_chars_table_test/RandomCharsTableTest.java b/src/test/java/homework_2_tests/random_chars_table_test/RandomCharsTableTest.java new file mode 100644 index 00000000..09ce9ec7 --- /dev/null +++ b/src/test/java/homework_2_tests/random_chars_table_test/RandomCharsTableTest.java @@ -0,0 +1,36 @@ +package homework_2_tests.random_chars_table_test; + +import java.util.InputMismatchException; +import java.util.Scanner; + +public class RandomCharsTableTest { + + public void run() { + int length; + int width; + /* enum strategy { + EVEN, + ODD + };*/ + int[][] table; + table = new int[3][4]; + + Scanner in = new Scanner(System.in); + String[] arr = in.nextLine().trim().split("\\s"); + in.close(); + if (arr.length < 3) { + System.out.println("Error! Not all data entered!"); + return; + } + try { + length = Integer.parseInt(arr[0]); + width = Integer.parseInt(arr[1]); + /* if (strategy.EVEN != strategy.valueOf(arr[2]) && strategy.ODD != strategy.valueOf(arr[2])) { + + }*/ + + } catch (InputMismatchException e) { + System.out.println("Error! Only numbers!"); + } + } +} diff --git a/src/test/java/homework_2_tests/traffic_light_tests/MainTest.java b/src/test/java/homework_2_tests/traffic_light_tests/MainTest.java new file mode 100644 index 00000000..187b875d --- /dev/null +++ b/src/test/java/homework_2_tests/traffic_light_tests/MainTest.java @@ -0,0 +1,8 @@ +package homework_2_tests.traffic_light_tests; + +public class MainTest { + + public static void main(String[] args) { + new TrafficLightTest().run(); + } +} \ No newline at end of file diff --git a/src/test/java/homework_2_tests/traffic_light_tests/TrafficLightTest.java b/src/test/java/homework_2_tests/traffic_light_tests/TrafficLightTest.java new file mode 100644 index 00000000..89e4907f --- /dev/null +++ b/src/test/java/homework_2_tests/traffic_light_tests/TrafficLightTest.java @@ -0,0 +1,89 @@ +package homework_2_tests.traffic_light_tests; + +import org.junit.jupiter.api.Test; + +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +class TrafficLightTest { + @Test + void test() { + final actual = new TrafficLight().setTrafficLightColour(11); + final String expected = new TrafficLight().setTrafficLightColour(11); + } + public static enum Colour { + RED, + YELLOW, + GREEN + } + public static Map coloursForPrinting = new HashMap(); + private Colour trafficLightColour; + + static { + coloursForPrinting.put(Colour.RED, "\u001B[31m"); + coloursForPrinting.put(Colour.YELLOW, "\u001B[33m"); + coloursForPrinting.put(Colour.GREEN, "\u001B[32m"); + } + + public void run() { + + Scanner scanner = new Scanner(System.in); + String str = scanner.nextLine(); + scanner.close(); + try { + int seconds = Integer.parseInt(str); + try { + this.setTrafficLightColour(seconds); + printColour(); + } + catch (WrongSecondsException e) { + System.out.println(e.getMessage()); + } + } catch (NumberFormatException ex) { + System.out.println("Error! Only numbers!"); + } + } + + public void setTrafficLightColour(int seconds) throws WrongSecondsException { + if (seconds < 0) + throw new WrongSecondsException("Error! Only positive!"); + else if (seconds >= 86400) + throw new WrongSecondsException("Error! Day is over!"); + else { + int secondsRemainder = seconds % 60; + if (secondsRemainder < 35) + this.setTrafficLightColour(Colour.GREEN); + else if (secondsRemainder >= 40 && secondsRemainder < 55) + this.setTrafficLightColour(Colour.RED); + else // (secondsRemainder >= 35 && secondsRemainder < 40) + // || (secondsRemainder >= 55 && secondsRemainder < 60) + this.setTrafficLightColour(Colour.YELLOW); + } + } + + class WrongSecondsException extends Exception { + + WrongSecondsException() { + } + + WrongSecondsException(String msg) { + super(msg); + } + } + + public void setTrafficLightColour(Colour colour) { + this.trafficLightColour = colour; + } + + public void printColour() { + final String ANSI_RESET = "\u001B[0m"; + Colour currentColour = this.getTrafficLightColour(); + + System.out.println(coloursForPrinting.get(currentColour) + currentColour + ANSI_RESET); + } + + public Colour getTrafficLightColour() { + return this.trafficLightColour; + } +} \ No newline at end of file From 05054716716ed83bc99a01d6bef5ffad93cbbb4d Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Fri, 23 Jul 2021 10:31:26 +0300 Subject: [PATCH 11/63] homework 2 --- .../traffic_light_tests/TrafficLightTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/test/java/homework_2_tests/traffic_light_tests/TrafficLightTest.java b/src/test/java/homework_2_tests/traffic_light_tests/TrafficLightTest.java index 89e4907f..6c7d6403 100644 --- a/src/test/java/homework_2_tests/traffic_light_tests/TrafficLightTest.java +++ b/src/test/java/homework_2_tests/traffic_light_tests/TrafficLightTest.java @@ -9,7 +9,13 @@ class TrafficLightTest { @Test void test() { - final actual = new TrafficLight().setTrafficLightColour(11); + TrafficLight trl = new TrafficLight(); + try { + trl.setTrafficLightColour(11); + } catch (WrongSecondsException e) { + + } + Colour c = trl.getTrafficLightColour(); final String expected = new TrafficLight().setTrafficLightColour(11); } public static enum Colour { From c328b7f858a84673c3bb63aa689d2d18cc04d9d2 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Fri, 23 Jul 2021 13:13:37 +0300 Subject: [PATCH 12/63] homework 2 --- .../pyramid_printer}/Main.java | 2 +- .../pyramid_printer}/PyramidPrinter.java | 2 +- .../random_chars_table}/Main.java | 2 +- .../random_chars_table}/RandomCharsTable.java | 2 +- .../traffic_light}/Main.java | 2 +- .../traffic_light}/TrafficLight.java | 2 +- .../pyramid_printer}/PyramidPrinterTest.java | 5 +- .../RandomCharsTableTest.java | 2 +- .../traffic_light/TrafficLightTest.java | 64 +++++++++++++ .../pyramid_printer_test/MainTest.java | 8 -- .../random_chars_table_test/MainTest.java | 7 -- .../traffic_light_tests/MainTest.java | 8 -- .../traffic_light_tests/TrafficLightTest.java | 95 ------------------- 13 files changed, 74 insertions(+), 127 deletions(-) rename src/main/java/{homework_2_tests/pyramid_printer_test => homework_2/pyramid_printer}/Main.java (70%) rename src/main/java/{homework_2_tests/pyramid_printer_test => homework_2/pyramid_printer}/PyramidPrinter.java (94%) rename src/main/java/{homework_2_tests/random_chars_table_test => homework_2/random_chars_table}/Main.java (68%) rename src/main/java/{homework_2_tests/random_chars_table_test => homework_2/random_chars_table}/RandomCharsTable.java (94%) rename src/main/java/{homework_2_tests/traffic_light_tests => homework_2/traffic_light}/Main.java (70%) rename src/main/java/{homework_2_tests/traffic_light_tests => homework_2/traffic_light}/TrafficLight.java (98%) rename src/test/java/{homework_2_tests/pyramid_printer_test => homework_2/pyramid_printer}/PyramidPrinterTest.java (92%) rename src/test/java/{homework_2_tests/random_chars_table_test => homework_2/random_chars_table}/RandomCharsTableTest.java (94%) create mode 100644 src/test/java/homework_2/traffic_light/TrafficLightTest.java delete mode 100644 src/test/java/homework_2_tests/pyramid_printer_test/MainTest.java delete mode 100644 src/test/java/homework_2_tests/random_chars_table_test/MainTest.java delete mode 100644 src/test/java/homework_2_tests/traffic_light_tests/MainTest.java delete mode 100644 src/test/java/homework_2_tests/traffic_light_tests/TrafficLightTest.java diff --git a/src/main/java/homework_2_tests/pyramid_printer_test/Main.java b/src/main/java/homework_2/pyramid_printer/Main.java similarity index 70% rename from src/main/java/homework_2_tests/pyramid_printer_test/Main.java rename to src/main/java/homework_2/pyramid_printer/Main.java index 8710cc73..905192d7 100644 --- a/src/main/java/homework_2_tests/pyramid_printer_test/Main.java +++ b/src/main/java/homework_2/pyramid_printer/Main.java @@ -1,4 +1,4 @@ -package homework_2_tests.pyramid_printer_test; +package homework_2.pyramid_printer; public class Main { diff --git a/src/main/java/homework_2_tests/pyramid_printer_test/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java similarity index 94% rename from src/main/java/homework_2_tests/pyramid_printer_test/PyramidPrinter.java rename to src/main/java/homework_2/pyramid_printer/PyramidPrinter.java index cd090130..9dd80883 100644 --- a/src/main/java/homework_2_tests/pyramid_printer_test/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -1,4 +1,4 @@ -package homework_2_tests.pyramid_printer_test; +package homework_2.pyramid_printer; import java.util.InputMismatchException; import java.util.Scanner; diff --git a/src/main/java/homework_2_tests/random_chars_table_test/Main.java b/src/main/java/homework_2/random_chars_table/Main.java similarity index 68% rename from src/main/java/homework_2_tests/random_chars_table_test/Main.java rename to src/main/java/homework_2/random_chars_table/Main.java index b5b1cc6d..bdb56ffe 100644 --- a/src/main/java/homework_2_tests/random_chars_table_test/Main.java +++ b/src/main/java/homework_2/random_chars_table/Main.java @@ -1,4 +1,4 @@ -package homework_2_tests.random_chars_table_test; +package homework_2.random_chars_table; public class Main { public static void main(String[] args) { diff --git a/src/main/java/homework_2_tests/random_chars_table_test/RandomCharsTable.java b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java similarity index 94% rename from src/main/java/homework_2_tests/random_chars_table_test/RandomCharsTable.java rename to src/main/java/homework_2/random_chars_table/RandomCharsTable.java index ca5fc608..63f7bae6 100644 --- a/src/main/java/homework_2_tests/random_chars_table_test/RandomCharsTable.java +++ b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java @@ -1,4 +1,4 @@ -package homework_2_tests.random_chars_table_test; +package homework_2.random_chars_table; import java.util.InputMismatchException; import java.util.Scanner; diff --git a/src/main/java/homework_2_tests/traffic_light_tests/Main.java b/src/main/java/homework_2/traffic_light/Main.java similarity index 70% rename from src/main/java/homework_2_tests/traffic_light_tests/Main.java rename to src/main/java/homework_2/traffic_light/Main.java index 69ddb1d3..26c16963 100644 --- a/src/main/java/homework_2_tests/traffic_light_tests/Main.java +++ b/src/main/java/homework_2/traffic_light/Main.java @@ -1,4 +1,4 @@ -package homework_2_tests.traffic_light_tests; +package homework_2.traffic_light; public class Main { diff --git a/src/main/java/homework_2_tests/traffic_light_tests/TrafficLight.java b/src/main/java/homework_2/traffic_light/TrafficLight.java similarity index 98% rename from src/main/java/homework_2_tests/traffic_light_tests/TrafficLight.java rename to src/main/java/homework_2/traffic_light/TrafficLight.java index ae851520..5c28a0f8 100644 --- a/src/main/java/homework_2_tests/traffic_light_tests/TrafficLight.java +++ b/src/main/java/homework_2/traffic_light/TrafficLight.java @@ -1,4 +1,4 @@ -package homework_2_tests.traffic_light_tests; +package homework_2.traffic_light; import java.util.HashMap; import java.util.Map; diff --git a/src/test/java/homework_2_tests/pyramid_printer_test/PyramidPrinterTest.java b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java similarity index 92% rename from src/test/java/homework_2_tests/pyramid_printer_test/PyramidPrinterTest.java rename to src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java index c896e412..42e4511f 100644 --- a/src/test/java/homework_2_tests/pyramid_printer_test/PyramidPrinterTest.java +++ b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java @@ -1,4 +1,4 @@ -package homework_2_tests.pyramid_printer_test; +package homework_2.pyramid_printer; import org.junit.jupiter.api.Test; @@ -8,7 +8,8 @@ public class PyramidPrinterTest { @Test void test() { -final String actual = new + +//final String actual = new } public void run() { diff --git a/src/test/java/homework_2_tests/random_chars_table_test/RandomCharsTableTest.java b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java similarity index 94% rename from src/test/java/homework_2_tests/random_chars_table_test/RandomCharsTableTest.java rename to src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java index 09ce9ec7..2b0cccb9 100644 --- a/src/test/java/homework_2_tests/random_chars_table_test/RandomCharsTableTest.java +++ b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java @@ -1,4 +1,4 @@ -package homework_2_tests.random_chars_table_test; +package homework_2.random_chars_table; import java.util.InputMismatchException; import java.util.Scanner; diff --git a/src/test/java/homework_2/traffic_light/TrafficLightTest.java b/src/test/java/homework_2/traffic_light/TrafficLightTest.java new file mode 100644 index 00000000..2b394322 --- /dev/null +++ b/src/test/java/homework_2/traffic_light/TrafficLightTest.java @@ -0,0 +1,64 @@ +package homework_2.traffic_light; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + + +class TrafficLightTest { + + @Test + void test1() { + TrafficLight trl = new TrafficLight(); + + try { + trl.setTrafficLightColour(11); + } catch (TrafficLight.WrongSecondsException e) { + } + final String actual = trl.getTrafficLightColour().toString(); + final String expected = "GREEN"; + assertEquals(actual, expected); + } + + @Test + void test2() { + TrafficLight trl = new TrafficLight(); + + try { + trl.setTrafficLightColour(37); + } catch (TrafficLight.WrongSecondsException e) { + } + final String actual = trl.getTrafficLightColour().toString(); + final String expected = "YELLOW"; + assertEquals(actual, expected); + } + + @Test + void test3() { + TrafficLight trl = new TrafficLight(); + + try { + trl.setTrafficLightColour(53); + } catch (TrafficLight.WrongSecondsException e) { + } + final String actual = trl.getTrafficLightColour().toString(); + final String expected = "RED"; + assertEquals(actual, expected); + } + + @Test + void test4() { + TrafficLight trl = new TrafficLight(); + Assertions.assertThrows(TrafficLight.WrongSecondsException.class, () -> { + trl.setTrafficLightColour(-37); + }); + } + + @Test + void test5() { + TrafficLight trl = new TrafficLight(); + Assertions.assertThrows(TrafficLight.WrongSecondsException.class, () -> { + trl.setTrafficLightColour(86401); + }); + } +} \ No newline at end of file diff --git a/src/test/java/homework_2_tests/pyramid_printer_test/MainTest.java b/src/test/java/homework_2_tests/pyramid_printer_test/MainTest.java deleted file mode 100644 index 645b0943..00000000 --- a/src/test/java/homework_2_tests/pyramid_printer_test/MainTest.java +++ /dev/null @@ -1,8 +0,0 @@ -package homework_2_tests.pyramid_printer_test; - -public class MainTest { - - public static void main(String[] args) { - new PyramidPrinterTest().run(); - } -} \ No newline at end of file diff --git a/src/test/java/homework_2_tests/random_chars_table_test/MainTest.java b/src/test/java/homework_2_tests/random_chars_table_test/MainTest.java deleted file mode 100644 index 69173674..00000000 --- a/src/test/java/homework_2_tests/random_chars_table_test/MainTest.java +++ /dev/null @@ -1,7 +0,0 @@ -package homework_2_tests.random_chars_table_test; - -public class MainTest { - public static void main(String[] args) { - new RandomCharsTableTest().run(); - } -} \ No newline at end of file diff --git a/src/test/java/homework_2_tests/traffic_light_tests/MainTest.java b/src/test/java/homework_2_tests/traffic_light_tests/MainTest.java deleted file mode 100644 index 187b875d..00000000 --- a/src/test/java/homework_2_tests/traffic_light_tests/MainTest.java +++ /dev/null @@ -1,8 +0,0 @@ -package homework_2_tests.traffic_light_tests; - -public class MainTest { - - public static void main(String[] args) { - new TrafficLightTest().run(); - } -} \ No newline at end of file diff --git a/src/test/java/homework_2_tests/traffic_light_tests/TrafficLightTest.java b/src/test/java/homework_2_tests/traffic_light_tests/TrafficLightTest.java deleted file mode 100644 index 6c7d6403..00000000 --- a/src/test/java/homework_2_tests/traffic_light_tests/TrafficLightTest.java +++ /dev/null @@ -1,95 +0,0 @@ -package homework_2_tests.traffic_light_tests; - -import org.junit.jupiter.api.Test; - -import java.util.HashMap; -import java.util.Map; -import java.util.Scanner; - -class TrafficLightTest { - @Test - void test() { - TrafficLight trl = new TrafficLight(); - try { - trl.setTrafficLightColour(11); - } catch (WrongSecondsException e) { - - } - Colour c = trl.getTrafficLightColour(); - final String expected = new TrafficLight().setTrafficLightColour(11); - } - public static enum Colour { - RED, - YELLOW, - GREEN - } - public static Map coloursForPrinting = new HashMap(); - private Colour trafficLightColour; - - static { - coloursForPrinting.put(Colour.RED, "\u001B[31m"); - coloursForPrinting.put(Colour.YELLOW, "\u001B[33m"); - coloursForPrinting.put(Colour.GREEN, "\u001B[32m"); - } - - public void run() { - - Scanner scanner = new Scanner(System.in); - String str = scanner.nextLine(); - scanner.close(); - try { - int seconds = Integer.parseInt(str); - try { - this.setTrafficLightColour(seconds); - printColour(); - } - catch (WrongSecondsException e) { - System.out.println(e.getMessage()); - } - } catch (NumberFormatException ex) { - System.out.println("Error! Only numbers!"); - } - } - - public void setTrafficLightColour(int seconds) throws WrongSecondsException { - if (seconds < 0) - throw new WrongSecondsException("Error! Only positive!"); - else if (seconds >= 86400) - throw new WrongSecondsException("Error! Day is over!"); - else { - int secondsRemainder = seconds % 60; - if (secondsRemainder < 35) - this.setTrafficLightColour(Colour.GREEN); - else if (secondsRemainder >= 40 && secondsRemainder < 55) - this.setTrafficLightColour(Colour.RED); - else // (secondsRemainder >= 35 && secondsRemainder < 40) - // || (secondsRemainder >= 55 && secondsRemainder < 60) - this.setTrafficLightColour(Colour.YELLOW); - } - } - - class WrongSecondsException extends Exception { - - WrongSecondsException() { - } - - WrongSecondsException(String msg) { - super(msg); - } - } - - public void setTrafficLightColour(Colour colour) { - this.trafficLightColour = colour; - } - - public void printColour() { - final String ANSI_RESET = "\u001B[0m"; - Colour currentColour = this.getTrafficLightColour(); - - System.out.println(coloursForPrinting.get(currentColour) + currentColour + ANSI_RESET); - } - - public Colour getTrafficLightColour() { - return this.trafficLightColour; - } -} \ No newline at end of file From 0670db50318ef79fcfaa5614bcbb25b123f98bc9 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Fri, 23 Jul 2021 15:23:08 +0300 Subject: [PATCH 13/63] homework 2 --- build.gradle | 8 ++- .../pyramid_printer/PyramidPrinter.java | 55 ++++++++++++------- 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/build.gradle b/build.gradle index b91dc843..d41478b5 100644 --- a/build.gradle +++ b/build.gradle @@ -12,8 +12,14 @@ repositories { dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' + + // lombok + compileOnly 'org.projectlombok:lombok:1.18.20' + annotationProcessor 'org.projectlombok:lombok:1.18.20' + testCompileOnly 'org.projectlombok:lombok:1.18.20' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.20' } test { useJUnitPlatform() -} \ No newline at end of file +} diff --git a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java index 9dd80883..6e56b699 100644 --- a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -1,34 +1,49 @@ package homework_2.pyramid_printer; -import java.util.InputMismatchException; +import lombok.Getter; +import lombok.Setter; import java.util.Scanner; +@Getter +@Setter class PyramidPrinter { + private StringBuilder pyramidString; public void run() { + Scanner scanner = new Scanner(System.in); + String str = scanner.nextLine(); - Scanner in = new Scanner(System.in); try { - int number = in.nextInt(); - in.close(); - StringBuilder result = new StringBuilder(); - char x = 'x'; - char cr = 13; - int i = 0; - int j; - while (i < number) { - j = 0; - while (j <= i) { - result.append(x); - j++; - } - result.append(cr); - i++; - System.out.println(result); + int number = Integer.parseInt(str); + if (number < 0) { + throw new ArithmeticException(); } - } catch ( - InputMismatchException e) { + buildPyramidString(number); + printPyramid(); + } catch (ArithmeticException ex) { + System.out.println("Error! Only positive numbers!"); + } catch (NumberFormatException ex) { System.out.println("Error! Only numbers!"); } + scanner.close(); + } + + public void buildPyramidString(int number) { + StringBuilder result = new StringBuilder(); + char charX = 'x'; + char newLineChar = '\n'; + + for (int i = 0, j = 0; i < number; i++, j = 0) { + while (j <= i) { + result.append(charX); + j++; + } + result.append(newLineChar); + } + setPyramidString(result); + } + + public void printPyramid() { + System.out.println(getPyramidString().toString()); } } \ No newline at end of file From 3a8540ca263af28b90f9dac4dd571c74ac2e3de2 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 24 Jul 2021 17:22:01 +0300 Subject: [PATCH 14/63] homework 2 --- .../pyramid_printer/PyramidPrinter.java | 10 +- .../random_chars_table/RandomCharsTable.java | 146 +++++++++++++++--- .../traffic_light/TrafficLight.java | 7 +- .../pyramid_printer/PyramidPrinterTest.java | 51 +++--- 4 files changed, 153 insertions(+), 61 deletions(-) diff --git a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java index 6e56b699..8f4ae133 100644 --- a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -2,6 +2,7 @@ import lombok.Getter; import lombok.Setter; + import java.util.Scanner; @Getter @@ -15,13 +16,10 @@ public void run() { try { int number = Integer.parseInt(str); - if (number < 0) { - throw new ArithmeticException(); - } buildPyramidString(number); printPyramid(); } catch (ArithmeticException ex) { - System.out.println("Error! Only positive numbers!"); + System.out.println("Only non-negative integer is allowed as passed parameter!"); } catch (NumberFormatException ex) { System.out.println("Error! Only numbers!"); } @@ -29,6 +27,10 @@ public void run() { } public void buildPyramidString(int number) { + if (number < 0) { + throw new ArithmeticException(); + } + StringBuilder result = new StringBuilder(); char charX = 'x'; char newLineChar = '\n'; diff --git a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java index 63f7bae6..e97bd335 100644 --- a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java +++ b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java @@ -1,36 +1,136 @@ package homework_2.random_chars_table; -import java.util.InputMismatchException; -import java.util.Scanner; +import lombok.Getter; +import lombok.Setter; +import java.util.*; + +@Getter +@Setter public class RandomCharsTable { + public static enum Strategy { + EVEN, + ODD + } + + private int length; + private int width; + private Strategy strategy; + private int[][] table; public void run() { - int length; - int width; - /* enum strategy { - EVEN, - ODD - };*/ - int[][] table; - table = new int[3][4]; - - Scanner in = new Scanner(System.in); - String[] arr = in.nextLine().trim().split("\\s"); - in.close(); - if (arr.length < 3) { - System.out.println("Error! Not all data entered!"); + Scanner scanner = new Scanner(System.in); + String[] arr = scanner.nextLine().trim().split("\\s"); + + scanner.close(); + try { + if (arr.length != 3) { + throw new NumberFormatException("Passed parameters should match the format [positive integer] [positive integer] [even|odd]!"); + } + } catch (NumberFormatException ex) { + System.out.println(ex.getMessage()); return; } + try { - length = Integer.parseInt(arr[0]); - width = Integer.parseInt(arr[1]); - /* if (strategy.EVEN != strategy.valueOf(arr[2]) && strategy.ODD != strategy.valueOf(arr[2])) { + setParameters(arr); + } catch (NumberFormatException ex) { + System.out.println("Passed parameters should match the format [positive integer] [positive integer] [even|odd]!"); + return; + } catch (IllegalArgumentException ex) { + System.out.println("Passed parameters should match the format [positive integer] [positive integer] [even|odd]!"); + return; + } + initializeTable(); + printTable(); + printTableByStrategy(getStrategy()); + } + + public void setParameters(String[] arr) { + for (int i = 0; i < 3; i++) { + if (i < 2) { + int j = Integer.parseInt(arr[i]); + + if (j < 1) { + throw new IllegalArgumentException(); + } + + if (i == 0) { + setLength(j); + } else { + setWidth(j); + } + } else { + String strategyStr = arr[i]; + + if (Strategy.EVEN.equals(Strategy.valueOf(strategyStr.toUpperCase())) || Strategy.ODD.equals(Strategy.valueOf(strategyStr.toUpperCase()))) { + strategy = Strategy.valueOf(strategyStr.toUpperCase()); + } else { + throw new NumberFormatException(); + } + } + } + } + + public void initializeTable() { + table = new int[length][width]; + + for (int i = 0; i < length; i++) { + for (int j = 0; j < width; j++) { + table[i][j] = getRandomChar(); + } + } + } + + private char getRandomChar() { + Random rnd = new Random(); + char c = (char) ('A' + rnd.nextInt(26)); + return c; + } + + public void printTable() { + int[][] table = getTable(); + StringBuilder result = new StringBuilder(); - }*/ + for (int i = 0; i < table.length; i++) { + for (int j = 0; j < table[i].length; j++) { + result.append("|" + (char) table[i][j]); + } + result.append("|" + "\n"); + } + System.out.println(result); + } + + public void printTableByStrategy(Strategy strategy) { + int[][] table = getTable(); + StringBuilder result = new StringBuilder(); + int remainder; + + if (strategy == Strategy.ODD) { + result.append("Odd letters: "); + remainder = 1; + } else { + result.append("Even letters: "); + remainder = 0; + } - } catch (InputMismatchException e) { - System.out.println("Error! Only numbers!"); + boolean firstPrint = true; + for (int i = 0; i < table.length; i++) { + for (int j = 0; j < table[i].length; j++) { + int currentChar = table[i][j]; + if (currentChar % 2 == remainder) { + String substr = String.valueOf((char) currentChar); + if (result.toString().contains(substr)) { + continue; + } + if (!firstPrint) { + result.append(", "); + } + result.append((char) currentChar); + firstPrint = false; + } + } } + System.out.println(result); } -} +} \ No newline at end of file diff --git a/src/main/java/homework_2/traffic_light/TrafficLight.java b/src/main/java/homework_2/traffic_light/TrafficLight.java index 5c28a0f8..1e70eb03 100644 --- a/src/main/java/homework_2/traffic_light/TrafficLight.java +++ b/src/main/java/homework_2/traffic_light/TrafficLight.java @@ -21,9 +21,9 @@ public static enum Colour { } public void run() { - Scanner scanner = new Scanner(System.in); String str = scanner.nextLine(); + scanner.close(); try { int seconds = Integer.parseInt(str); @@ -41,7 +41,7 @@ public void run() { public void setTrafficLightColour(int seconds) throws WrongSecondsException { if (seconds < 0) - throw new WrongSecondsException("Error! Only positive!"); + throw new WrongSecondsException("Only non-negative integer is allowed as passed parameter!"); else if (seconds >= 86400) throw new WrongSecondsException("Error! Day is over!"); else { @@ -58,9 +58,6 @@ else if (secondsRemainder >= 40 && secondsRemainder < 55) class WrongSecondsException extends Exception { - WrongSecondsException() { - } - WrongSecondsException(String msg) { super(msg); } diff --git a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java index 42e4511f..51b1a02a 100644 --- a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java +++ b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java @@ -1,40 +1,33 @@ package homework_2.pyramid_printer; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; -import java.util.InputMismatchException; -import java.util.Scanner; -public class PyramidPrinterTest { -@Test -void test() { +class PyramidPrinterTest { -//final String actual = new -} - public void run() { + @Test + void test1() { + PyramidPrinter ppr = new PyramidPrinter(); - Scanner in = new Scanner(System.in); try { - int number = in.nextInt(); - in.close(); - StringBuilder result = new StringBuilder(); - char x = 'x'; - char cr = 13; - int i = 0; - int j; - while (i < number) { - j = 0; - while (j <= i) { - result.append(x); - j++; - } - result.append(cr); - i++; - System.out.println(result); - } - } catch ( - InputMismatchException e) { - System.out.println("Error! Only numbers!"); + ppr.buildPyramidString(3); + } catch (ArithmeticException e) { + } catch (NumberFormatException e) { + } + final StringBuilder actual = ppr.getPyramidString(); + final StringBuilder expected = new StringBuilder("x" + '\n' + "xx" + '\n' + "xxx" + '\n'); + assertEquals(actual.toString(), expected.toString()); + } + + @Test + void test2() { + PyramidPrinter ppr = new PyramidPrinter(); + + Assertions.assertThrows(ArithmeticException.class, () -> { + ppr.buildPyramidString(-3); + }); } } \ No newline at end of file From 12441b5bf982d91bd7395b3bdc874975381c9811 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 24 Jul 2021 23:06:36 +0300 Subject: [PATCH 15/63] homework 2 --- .../random_chars_table/RandomCharsTable.java | 12 ++--- .../pyramid_printer/PyramidPrinterTest.java | 51 +++++++++++-------- .../RandomCharsTableTest.java | 47 ++++++++--------- 3 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java index e97bd335..ff570ecc 100644 --- a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java +++ b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java @@ -42,8 +42,8 @@ public void run() { return; } initializeTable(); - printTable(); - printTableByStrategy(getStrategy()); + System.out.println(getStrForPrinting()); + System.out.println(getStrForPrintingByStrategy(getStrategy())); } public void setParameters(String[] arr) { @@ -88,7 +88,7 @@ private char getRandomChar() { return c; } - public void printTable() { + public StringBuilder getStrForPrinting() { int[][] table = getTable(); StringBuilder result = new StringBuilder(); @@ -98,10 +98,10 @@ public void printTable() { } result.append("|" + "\n"); } - System.out.println(result); + return result; } - public void printTableByStrategy(Strategy strategy) { + public StringBuilder getStrForPrintingByStrategy(Strategy strategy) { int[][] table = getTable(); StringBuilder result = new StringBuilder(); int remainder; @@ -131,6 +131,6 @@ public void printTableByStrategy(Strategy strategy) { } } } - System.out.println(result); + return result; } } \ No newline at end of file diff --git a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java index 51b1a02a..42e4511f 100644 --- a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java +++ b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java @@ -1,33 +1,40 @@ package homework_2.pyramid_printer; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import java.util.InputMismatchException; +import java.util.Scanner; -class PyramidPrinterTest { +public class PyramidPrinterTest { +@Test +void test() { - @Test - void test1() { - PyramidPrinter ppr = new PyramidPrinter(); +//final String actual = new +} + public void run() { + Scanner in = new Scanner(System.in); try { - ppr.buildPyramidString(3); - } catch (ArithmeticException e) { - } catch (NumberFormatException e) { - + int number = in.nextInt(); + in.close(); + StringBuilder result = new StringBuilder(); + char x = 'x'; + char cr = 13; + int i = 0; + int j; + while (i < number) { + j = 0; + while (j <= i) { + result.append(x); + j++; + } + result.append(cr); + i++; + System.out.println(result); + } + } catch ( + InputMismatchException e) { + System.out.println("Error! Only numbers!"); } - final StringBuilder actual = ppr.getPyramidString(); - final StringBuilder expected = new StringBuilder("x" + '\n' + "xx" + '\n' + "xxx" + '\n'); - assertEquals(actual.toString(), expected.toString()); - } - - @Test - void test2() { - PyramidPrinter ppr = new PyramidPrinter(); - - Assertions.assertThrows(ArithmeticException.class, () -> { - ppr.buildPyramidString(-3); - }); } } \ No newline at end of file diff --git a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java index 2b0cccb9..8f2a95d7 100644 --- a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java +++ b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java @@ -1,36 +1,29 @@ package homework_2.random_chars_table; -import java.util.InputMismatchException; -import java.util.Scanner; -public class RandomCharsTableTest { +import homework_2.random_chars_table.RandomCharsTable; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; - public void run() { - int length; - int width; - /* enum strategy { - EVEN, - ODD - };*/ - int[][] table; - table = new int[3][4]; - Scanner in = new Scanner(System.in); - String[] arr = in.nextLine().trim().split("\\s"); - in.close(); - if (arr.length < 3) { - System.out.println("Error! Not all data entered!"); - return; - } - try { - length = Integer.parseInt(arr[0]); - width = Integer.parseInt(arr[1]); - /* if (strategy.EVEN != strategy.valueOf(arr[2]) && strategy.ODD != strategy.valueOf(arr[2])) { +class RandomCharsTableTest { - }*/ + @Test + void test1() { //ODD + RandomCharsTable rct = new RandomCharsTable(); - } catch (InputMismatchException e) { - System.out.println("Error! Only numbers!"); - } + rct.setLength(3); + rct.setWidth(2); + rct.setStrategy(RandomCharsTable.Strategy.ODD); + int [][] twoDimArray = {{65,77}, {87,90}, {78,81}}; + rct.setTable(twoDimArray); + + final StringBuilder actualPrinting = rct.getStrForPrinting(); + final StringBuilder actualPrintingByStrategy = rct.getStrForPrintingByStrategy(rct.getStrategy()); + final StringBuilder expectedPrinting = new StringBuilder("|A|M|" + "\n" + "|W|Z|" + "\n" + "|N|Q|" + "\n"); + final StringBuilder expectedPrintingByStrategy = new StringBuilder("Odd letters: A, M, W, Q"); + assertEquals(actualPrinting, expectedPrinting); + assertEquals(actualPrintingByStrategy, expectedPrintingByStrategy); } } From 4dd951a91c541e24e61b88c2816b096a1b7ec6ec Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 24 Jul 2021 23:15:55 +0300 Subject: [PATCH 16/63] homework 2 --- .../pyramid_printer/PyramidPrinterTest.java | 51 ++++++++----------- .../RandomCharsTableTest.java | 2 +- 2 files changed, 23 insertions(+), 30 deletions(-) diff --git a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java index 42e4511f..51b1a02a 100644 --- a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java +++ b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java @@ -1,40 +1,33 @@ package homework_2.pyramid_printer; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; -import java.util.InputMismatchException; -import java.util.Scanner; -public class PyramidPrinterTest { -@Test -void test() { +class PyramidPrinterTest { -//final String actual = new -} - public void run() { + @Test + void test1() { + PyramidPrinter ppr = new PyramidPrinter(); - Scanner in = new Scanner(System.in); try { - int number = in.nextInt(); - in.close(); - StringBuilder result = new StringBuilder(); - char x = 'x'; - char cr = 13; - int i = 0; - int j; - while (i < number) { - j = 0; - while (j <= i) { - result.append(x); - j++; - } - result.append(cr); - i++; - System.out.println(result); - } - } catch ( - InputMismatchException e) { - System.out.println("Error! Only numbers!"); + ppr.buildPyramidString(3); + } catch (ArithmeticException e) { + } catch (NumberFormatException e) { + } + final StringBuilder actual = ppr.getPyramidString(); + final StringBuilder expected = new StringBuilder("x" + '\n' + "xx" + '\n' + "xxx" + '\n'); + assertEquals(actual.toString(), expected.toString()); + } + + @Test + void test2() { + PyramidPrinter ppr = new PyramidPrinter(); + + Assertions.assertThrows(ArithmeticException.class, () -> { + ppr.buildPyramidString(-3); + }); } } \ No newline at end of file diff --git a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java index 8f2a95d7..a26cf8db 100644 --- a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java +++ b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java @@ -24,6 +24,6 @@ void test1() { //ODD final StringBuilder expectedPrinting = new StringBuilder("|A|M|" + "\n" + "|W|Z|" + "\n" + "|N|Q|" + "\n"); final StringBuilder expectedPrintingByStrategy = new StringBuilder("Odd letters: A, M, W, Q"); assertEquals(actualPrinting, expectedPrinting); - assertEquals(actualPrintingByStrategy, expectedPrintingByStrategy); + //assertEquals(actualPrintingByStrategy, expectedPrintingByStrategy); } } From e3c3e2e8d4453e665362e9d0f6847c9e4fb5f8c5 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 24 Jul 2021 23:51:18 +0300 Subject: [PATCH 17/63] homework 2 --- .../random_chars_table/RandomCharsTable.java | 15 ++--- .../RandomCharsTableTest.java | 61 +++++++++++++++++-- 2 files changed, 62 insertions(+), 14 deletions(-) diff --git a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java index ff570ecc..2ccef4aa 100644 --- a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java +++ b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java @@ -23,15 +23,6 @@ public void run() { String[] arr = scanner.nextLine().trim().split("\\s"); scanner.close(); - try { - if (arr.length != 3) { - throw new NumberFormatException("Passed parameters should match the format [positive integer] [positive integer] [even|odd]!"); - } - } catch (NumberFormatException ex) { - System.out.println(ex.getMessage()); - return; - } - try { setParameters(arr); } catch (NumberFormatException ex) { @@ -47,6 +38,10 @@ public void run() { } public void setParameters(String[] arr) { + if (arr.length != 3) { + throw new IllegalArgumentException(); + } + for (int i = 0; i < 3; i++) { if (i < 2) { int j = Integer.parseInt(arr[i]); @@ -66,7 +61,7 @@ public void setParameters(String[] arr) { if (Strategy.EVEN.equals(Strategy.valueOf(strategyStr.toUpperCase())) || Strategy.ODD.equals(Strategy.valueOf(strategyStr.toUpperCase()))) { strategy = Strategy.valueOf(strategyStr.toUpperCase()); } else { - throw new NumberFormatException(); + throw new IllegalArgumentException(); } } } diff --git a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java index a26cf8db..a7c64d92 100644 --- a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java +++ b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java @@ -1,7 +1,6 @@ package homework_2.random_chars_table; -import homework_2.random_chars_table.RandomCharsTable; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -16,14 +15,68 @@ void test1() { //ODD rct.setLength(3); rct.setWidth(2); rct.setStrategy(RandomCharsTable.Strategy.ODD); - int [][] twoDimArray = {{65,77}, {87,90}, {78,81}}; + int [][] twoDimArray = {{65, 77}, {87, 90}, {78, 81}}; rct.setTable(twoDimArray); final StringBuilder actualPrinting = rct.getStrForPrinting(); final StringBuilder actualPrintingByStrategy = rct.getStrForPrintingByStrategy(rct.getStrategy()); final StringBuilder expectedPrinting = new StringBuilder("|A|M|" + "\n" + "|W|Z|" + "\n" + "|N|Q|" + "\n"); final StringBuilder expectedPrintingByStrategy = new StringBuilder("Odd letters: A, M, W, Q"); - assertEquals(actualPrinting, expectedPrinting); - //assertEquals(actualPrintingByStrategy, expectedPrintingByStrategy); + assertEquals(actualPrinting.toString(), expectedPrinting.toString()); + assertEquals(actualPrintingByStrategy.toString(), expectedPrintingByStrategy.toString()); + } + + @Test + void test2() { //EVEN + RandomCharsTable rct = new RandomCharsTable(); + + rct.setLength(3); + rct.setWidth(2); + rct.setStrategy(RandomCharsTable.Strategy.EVEN); + int [][] twoDimArray = {{65,77}, {87,90}, {78,81}}; + rct.setTable(twoDimArray); + + final StringBuilder actualPrinting = rct.getStrForPrinting(); + final StringBuilder actualPrintingByStrategy = rct.getStrForPrintingByStrategy(rct.getStrategy()); + final StringBuilder expectedPrinting = new StringBuilder("|A|M|" + "\n" + "|W|Z|" + "\n" + "|N|Q|" + "\n"); + final StringBuilder expectedPrintingByStrategy = new StringBuilder("Even letters: Z, N"); + assertEquals(actualPrinting.toString(), expectedPrinting.toString()); + assertEquals(actualPrintingByStrategy.toString(), expectedPrintingByStrategy.toString()); + } + + @Test + void test3() { + RandomCharsTable rct = new RandomCharsTable(); + + Assertions.assertThrows(IllegalArgumentException.class, () -> { + rct.setParameters(new String[] {"3", "4", "odd", "ODD"}); + }); + } + + @Test + void test4() { + RandomCharsTable rct = new RandomCharsTable(); + + Assertions.assertThrows(NumberFormatException.class, () -> { + rct.setParameters(new String[] {"3", "j", "ODD"}); + }); + } + + @Test + void test5() { + RandomCharsTable rct = new RandomCharsTable(); + + Assertions.assertThrows(IllegalArgumentException.class, () -> { + rct.setParameters(new String[] {"3", "-2", "EVEN"}); + }); + } + + @Test + void test6() { + RandomCharsTable rct = new RandomCharsTable(); + + Assertions.assertThrows(IllegalArgumentException.class, () -> { + rct.setParameters(new String[] {"3", "2", "eeven"}); + }); } } From a52d19f18bf73761c9bfbd11a06891255b659c6a Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 26 Jul 2021 11:27:49 +0300 Subject: [PATCH 18/63] homework 2 --- .../pyramid_printer/PyramidPrinter.java | 2 +- .../homework_2/random_chars_table/Main.java | 1 + .../random_chars_table/RandomCharsTable.java | 8 +- src/main/java/homework_3/library/Author.java | 33 ++++++ .../java/homework_3/library/LibraryCard.java | 107 ++++++++++++++++++ src/main/java/homework_3/library/Main.java | 23 ++++ 6 files changed, 168 insertions(+), 6 deletions(-) create mode 100644 src/main/java/homework_3/library/Author.java create mode 100644 src/main/java/homework_3/library/LibraryCard.java create mode 100644 src/main/java/homework_3/library/Main.java diff --git a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java index 8f4ae133..4d4c459c 100644 --- a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -2,12 +2,12 @@ import lombok.Getter; import lombok.Setter; - import java.util.Scanner; @Getter @Setter class PyramidPrinter { + private StringBuilder pyramidString; public void run() { diff --git a/src/main/java/homework_2/random_chars_table/Main.java b/src/main/java/homework_2/random_chars_table/Main.java index bdb56ffe..bac6f2c7 100644 --- a/src/main/java/homework_2/random_chars_table/Main.java +++ b/src/main/java/homework_2/random_chars_table/Main.java @@ -1,6 +1,7 @@ package homework_2.random_chars_table; public class Main { + public static void main(String[] args) { new RandomCharsTable().run(); } diff --git a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java index 2ccef4aa..f228c481 100644 --- a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java +++ b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java @@ -2,17 +2,16 @@ import lombok.Getter; import lombok.Setter; - import java.util.*; @Getter @Setter public class RandomCharsTable { - public static enum Strategy { + + public enum Strategy { EVEN, ODD } - private int length; private int width; private Strategy strategy; @@ -79,8 +78,7 @@ public void initializeTable() { private char getRandomChar() { Random rnd = new Random(); - char c = (char) ('A' + rnd.nextInt(26)); - return c; + return (char) ('A' + rnd.nextInt(26)); } public StringBuilder getStrForPrinting() { diff --git a/src/main/java/homework_3/library/Author.java b/src/main/java/homework_3/library/Author.java new file mode 100644 index 00000000..cdf6b3c2 --- /dev/null +++ b/src/main/java/homework_3/library/Author.java @@ -0,0 +1,33 @@ +package homework_3.library; + +import lombok.Data; +import lombok.NonNull; + +@Data +public class Author { + + private String Name; + private String Country; + private String Century; + + public Author(String name) { + if (name == null || "".equals(name.trim())) { + throw new IllegalArgumentException(); + } + Name = name; + } + + public Author(String name, String country, String century) { + if (name == null || "".equals(name.trim())) { + throw new IllegalArgumentException(); + } + Name = name; + Country = country; + Century = century; + } + + @Override + public String toString() { + return Name; + } +} diff --git a/src/main/java/homework_3/library/LibraryCard.java b/src/main/java/homework_3/library/LibraryCard.java new file mode 100644 index 00000000..5511fb07 --- /dev/null +++ b/src/main/java/homework_3/library/LibraryCard.java @@ -0,0 +1,107 @@ +/* + * List of ImmutableClass requirements: + * 1) class must be final; + * 2) all fields must be final; + * 3) methods-mutators must return a new copy of the object; + */ + +package homework_3.library; + +import lombok.Getter; +import java.util.*; + +@Getter +public final class LibraryCard { + + private enum Section { + MYSTERY, + HORROR, + HISTORICAL, + ROMANCE, + SIENCE_FICTION, + FANTASY, + REALIST_LITERATURE + } + private final Author author; + private final String title; + private final Section section; + private final Calendar yearOfPublishing; + private final int numberOfPages; + + public static LibraryCard initializeNewLibraryCard (Author author, String title, GregorianCalendar yearOfPublishing, int numberOfPages, String sectionStr) + throws IllegalArgumentException { + if (author == null + || title == null + || "".equals(title.trim()) + || yearOfPublishing.equals(new GregorianCalendar(0, Calendar.JANUARY, 0)) + || yearOfPublishing.after(new GregorianCalendar()) + || numberOfPages == 0) { + throw new IllegalArgumentException(); + } + Section section; + + if (sectionStr != null) { + section = initializeSection(sectionStr); + } else section = null; + + if (section == null) { + return new LibraryCard(author, title, yearOfPublishing, numberOfPages); + } else { + return new LibraryCard(author, title, yearOfPublishing, numberOfPages, section); + } + } + + static private Section initializeSection(String sectionStr) { + for (Section section : Section.values()) { + if (section.equals(Section.valueOf(sectionStr.toUpperCase()))) { + return section; + } + } + return null; + } + + public LibraryCard(Author author, String title, Calendar yearOfPublishing, int numberOfPages, Section section) { + this.title = title; + this.author = author; + this.yearOfPublishing = yearOfPublishing; + this.numberOfPages = numberOfPages; + this.section = section; + } + + public LibraryCard(Author author, String title, Calendar yearOfPublishing, int numberOfPages) { + this.title = title; + this.author = author; + this.yearOfPublishing = yearOfPublishing; + this.numberOfPages = numberOfPages; + this.section = Section.REALIST_LITERATURE; + } + + @Override + public String toString() { + return getAuthor() + " \"" + + getTitle() + " \", " + + getYearOfPublishing().get(Calendar.YEAR) + ", " + + getNumberOfPages() + " pp. (" + + getSection() + ")"; + } + + public LibraryCard setAuthor(Author author) { + return new LibraryCard(author, this.title, this.yearOfPublishing, this.numberOfPages, this.section); + } + + public LibraryCard setTitle(String title) { + return new LibraryCard(this.author, title, this.yearOfPublishing, this.numberOfPages, this.section); + } + + public LibraryCard setYearOfPublishing(GregorianCalendar yearOfPublishing) { + return new LibraryCard(this.author, this.title, yearOfPublishing, this.numberOfPages, this.section); + } + + public LibraryCard setNumberOfPages(int numberOfPages) { + return new LibraryCard(this.author, this.title, this.yearOfPublishing, numberOfPages, this.section); + } + + public LibraryCard setSection(Section section) { + return new LibraryCard(this.author, this.title, this.yearOfPublishing, this.numberOfPages, section); + } +} diff --git a/src/main/java/homework_3/library/Main.java b/src/main/java/homework_3/library/Main.java new file mode 100644 index 00000000..ceadd0e7 --- /dev/null +++ b/src/main/java/homework_3/library/Main.java @@ -0,0 +1,23 @@ +package homework_3.library; + +import java.util.Calendar; +import java.util.GregorianCalendar; + +public class Main { + + public static void main(String[] args) { + LibraryCard lc; + + try { + lc = LibraryCard.initializeNewLibraryCard(new Author(" ", "France", "19"), + "Les Misérables", + new GregorianCalendar(2020, Calendar.JANUARY, 1), + 1248, + null); + } catch (IllegalArgumentException e) { + System.out.println("Error! No author, title, year of publishing or number of pages!"); + return; + } + System.out.println(lc); + } +} From f005ea661b84d98512cb40731897547fdfebf86f Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 26 Jul 2021 11:40:43 +0300 Subject: [PATCH 19/63] homework 2 --- src/main/java/homework_3/library/Author.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/homework_3/library/Author.java b/src/main/java/homework_3/library/Author.java index cdf6b3c2..d09aa1aa 100644 --- a/src/main/java/homework_3/library/Author.java +++ b/src/main/java/homework_3/library/Author.java @@ -14,7 +14,7 @@ public Author(String name) { if (name == null || "".equals(name.trim())) { throw new IllegalArgumentException(); } - Name = name; + Name = name;; } public Author(String name, String country, String century) { From 84c1232be2dd98c606e90134effdd151d9284a96 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 26 Jul 2021 11:40:49 +0300 Subject: [PATCH 20/63] homework 2 --- src/main/java/homework_3/library/Author.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/homework_3/library/Author.java b/src/main/java/homework_3/library/Author.java index d09aa1aa..cdf6b3c2 100644 --- a/src/main/java/homework_3/library/Author.java +++ b/src/main/java/homework_3/library/Author.java @@ -14,7 +14,7 @@ public Author(String name) { if (name == null || "".equals(name.trim())) { throw new IllegalArgumentException(); } - Name = name;; + Name = name; } public Author(String name, String country, String century) { From 7deb319455ef2b1404afa9603d3963b940c1dcf0 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 26 Jul 2021 11:44:39 +0300 Subject: [PATCH 21/63] homework 2 --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index ae7e3d48..632ea01c 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ | Number | Solution | Short description | --- | --- | --- | | HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | +| HW2 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2) | Apps: traffic_light, pyramid_printer, random_chars_table | + [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) From 9bd99113dffae098702de022259ef2ab5903309f Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 26 Jul 2021 11:45:44 +0300 Subject: [PATCH 22/63] homework 3 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 632ea01c..6a45e724 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ | --- | --- | --- | | HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | | HW2 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2) | Apps: traffic_light, pyramid_printer, random_chars_table | - +| HW3 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_3) | ImmutableClass | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) From e398fd1be46ad0a4a1d45c09ddb1043146eaefe9 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 28 Jul 2021 12:29:45 +0300 Subject: [PATCH 23/63] homework 3 --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6a45e724..b4625ff3 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,9 @@ | Number | Solution | Short description | --- | --- | --- | | HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | -| HW2 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2) | Apps: traffic_light, pyramid_printer, random_chars_table | +| HW2. TrafficLight | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/traffic_light) | traffic_light | +| HW2. PyramidPrinter | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/pyramid_printer) | pyramid_printer | +| HW2. RandomCharsTable | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/random_chars_table) | random_chars_table | | HW3 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_3) | ImmutableClass | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) From c1d3ad1e3a9a582ade171a067d0d7d7ee1d10489 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 28 Jul 2021 21:30:52 +0300 Subject: [PATCH 24/63] homework 3 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b4625ff3..9a3005ac 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ | HW2. PyramidPrinter | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/pyramid_printer) | pyramid_printer | | HW2. RandomCharsTable | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/random_chars_table) | random_chars_table | | HW3 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_3) | ImmutableClass | - +| tests | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/test/java) | Test classes | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) [Link to codingbat profile](https://codingbat.com/done?user=rog.elena.yu@gmail.com&tag=9660623200) \ No newline at end of file From d104c17e458ec435877277b399ced98b24cba3be Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 28 Jul 2021 21:56:44 +0300 Subject: [PATCH 25/63] homework 3 --- .../java/homework_2/pyramid_printer/PyramidPrinter.java | 6 ++---- .../homework_2/pyramid_printer/PyramidPrinterTest.java | 1 + .../random_chars_table/RandomCharsTableTest.java | 2 ++ .../java/homework_2/traffic_light/TrafficLightTest.java | 8 ++++++++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java index 4d4c459c..ff49b966 100644 --- a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -11,10 +11,9 @@ class PyramidPrinter { private StringBuilder pyramidString; public void run() { - Scanner scanner = new Scanner(System.in); - String str = scanner.nextLine(); - try { + try (Scanner scanner = new Scanner(System.in)) { + String str = scanner.nextLine(); int number = Integer.parseInt(str); buildPyramidString(number); printPyramid(); @@ -23,7 +22,6 @@ public void run() { } catch (NumberFormatException ex) { System.out.println("Error! Only numbers!"); } - scanner.close(); } public void buildPyramidString(int number) { diff --git a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java index 51b1a02a..bd2d2699 100644 --- a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java +++ b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java @@ -19,6 +19,7 @@ void test1() { } final StringBuilder actual = ppr.getPyramidString(); final StringBuilder expected = new StringBuilder("x" + '\n' + "xx" + '\n' + "xxx" + '\n'); + assertEquals(actual.toString(), expected.toString()); } diff --git a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java index a7c64d92..49fc9b68 100644 --- a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java +++ b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java @@ -22,6 +22,7 @@ void test1() { //ODD final StringBuilder actualPrintingByStrategy = rct.getStrForPrintingByStrategy(rct.getStrategy()); final StringBuilder expectedPrinting = new StringBuilder("|A|M|" + "\n" + "|W|Z|" + "\n" + "|N|Q|" + "\n"); final StringBuilder expectedPrintingByStrategy = new StringBuilder("Odd letters: A, M, W, Q"); + assertEquals(actualPrinting.toString(), expectedPrinting.toString()); assertEquals(actualPrintingByStrategy.toString(), expectedPrintingByStrategy.toString()); } @@ -40,6 +41,7 @@ void test2() { //EVEN final StringBuilder actualPrintingByStrategy = rct.getStrForPrintingByStrategy(rct.getStrategy()); final StringBuilder expectedPrinting = new StringBuilder("|A|M|" + "\n" + "|W|Z|" + "\n" + "|N|Q|" + "\n"); final StringBuilder expectedPrintingByStrategy = new StringBuilder("Even letters: Z, N"); + assertEquals(actualPrinting.toString(), expectedPrinting.toString()); assertEquals(actualPrintingByStrategy.toString(), expectedPrintingByStrategy.toString()); } diff --git a/src/test/java/homework_2/traffic_light/TrafficLightTest.java b/src/test/java/homework_2/traffic_light/TrafficLightTest.java index 2b394322..87efcd2d 100644 --- a/src/test/java/homework_2/traffic_light/TrafficLightTest.java +++ b/src/test/java/homework_2/traffic_light/TrafficLightTest.java @@ -15,8 +15,10 @@ void test1() { trl.setTrafficLightColour(11); } catch (TrafficLight.WrongSecondsException e) { } + final String actual = trl.getTrafficLightColour().toString(); final String expected = "GREEN"; + assertEquals(actual, expected); } @@ -28,8 +30,10 @@ void test2() { trl.setTrafficLightColour(37); } catch (TrafficLight.WrongSecondsException e) { } + final String actual = trl.getTrafficLightColour().toString(); final String expected = "YELLOW"; + assertEquals(actual, expected); } @@ -41,14 +45,17 @@ void test3() { trl.setTrafficLightColour(53); } catch (TrafficLight.WrongSecondsException e) { } + final String actual = trl.getTrafficLightColour().toString(); final String expected = "RED"; + assertEquals(actual, expected); } @Test void test4() { TrafficLight trl = new TrafficLight(); + Assertions.assertThrows(TrafficLight.WrongSecondsException.class, () -> { trl.setTrafficLightColour(-37); }); @@ -57,6 +64,7 @@ void test4() { @Test void test5() { TrafficLight trl = new TrafficLight(); + Assertions.assertThrows(TrafficLight.WrongSecondsException.class, () -> { trl.setTrafficLightColour(86401); }); From c6323ee3233b69e7d1c6c44705a43ef2721e018b Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 4 Aug 2021 22:26:45 +0300 Subject: [PATCH 26/63] homework 3 --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9a3005ac..cba8b60c 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ | Number | Solution | Short description | --- | --- | --- | | HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | -| HW2. TrafficLight | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/traffic_light) | traffic_light | -| HW2. PyramidPrinter | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/pyramid_printer) | pyramid_printer | -| HW2. RandomCharsTable | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/random_chars_table) | random_chars_table | -| HW3 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_3) | ImmutableClass | -| tests | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/test/java) | Test classes | +| HW2. TrafficLight | [Traffic Light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/traffic_light) | traffic_light | +| HW2. PyramidPrinter | [Pyramid Printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/pyramid_printer) | pyramid_printer | +| HW2. RandomCharsTable | [Random Chars Table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/random_chars_table) | random_chars_table | +| HW3 | [Immutable Class](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_3) | ImmutableClass | +| tests | [Test classes](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/test/java) | Test classes | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) [Link to codingbat profile](https://codingbat.com/done?user=rog.elena.yu@gmail.com&tag=9660623200) \ No newline at end of file From 197fb99d991110e53af1b0d9d3e19262d324c4ed Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 4 Aug 2021 22:46:35 +0300 Subject: [PATCH 27/63] homework 3 --- build.gradle | 1 - .../pyramid_printer/PyramidPrinter.java | 11 +++++------ src/main/java/homework_3/library/Author.java | 16 ++++++++-------- .../pyramid_printer/PyramidPrinterTest.java | 8 +++----- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/build.gradle b/build.gradle index d41478b5..0fd42aba 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,6 @@ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' - // lombok compileOnly 'org.projectlombok:lombok:1.18.20' annotationProcessor 'org.projectlombok:lombok:1.18.20' testCompileOnly 'org.projectlombok:lombok:1.18.20' diff --git a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java index ff49b966..64ac762a 100644 --- a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -2,6 +2,8 @@ import lombok.Getter; import lombok.Setter; + +import java.util.InputMismatchException; import java.util.Scanner; @Getter @@ -17,10 +19,8 @@ public void run() { int number = Integer.parseInt(str); buildPyramidString(number); printPyramid(); - } catch (ArithmeticException ex) { + } catch (ArithmeticException | InputMismatchException ex) { System.out.println("Only non-negative integer is allowed as passed parameter!"); - } catch (NumberFormatException ex) { - System.out.println("Error! Only numbers!"); } } @@ -33,10 +33,9 @@ public void buildPyramidString(int number) { char charX = 'x'; char newLineChar = '\n'; - for (int i = 0, j = 0; i < number; i++, j = 0) { - while (j <= i) { + for (int i = 0; i < number; i++) { + for (int j = 0; j <= i; j++) { result.append(charX); - j++; } result.append(newLineChar); } diff --git a/src/main/java/homework_3/library/Author.java b/src/main/java/homework_3/library/Author.java index cdf6b3c2..0a70be18 100644 --- a/src/main/java/homework_3/library/Author.java +++ b/src/main/java/homework_3/library/Author.java @@ -6,28 +6,28 @@ @Data public class Author { - private String Name; - private String Country; - private String Century; + private String name; + private String country; + private String century; public Author(String name) { if (name == null || "".equals(name.trim())) { throw new IllegalArgumentException(); } - Name = name; + this.name = name; } public Author(String name, String country, String century) { if (name == null || "".equals(name.trim())) { throw new IllegalArgumentException(); } - Name = name; - Country = country; - Century = century; + this.name = name; + this.country = country; + this.century = century; } @Override public String toString() { - return Name; + return name; } } diff --git a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java index bd2d2699..5d9fad98 100644 --- a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java +++ b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java @@ -18,17 +18,15 @@ void test1() { } final StringBuilder actual = ppr.getPyramidString(); - final StringBuilder expected = new StringBuilder("x" + '\n' + "xx" + '\n' + "xxx" + '\n'); + final String expected = "x" + '\n' + "xx" + '\n' + "xxx" + '\n'; - assertEquals(actual.toString(), expected.toString()); + assertEquals(actual.toString(), expected); } @Test void test2() { PyramidPrinter ppr = new PyramidPrinter(); - Assertions.assertThrows(ArithmeticException.class, () -> { - ppr.buildPyramidString(-3); - }); + Assertions.assertThrows(ArithmeticException.class, () -> ppr.buildPyramidString(-3)); } } \ No newline at end of file From ab8da270a5bd51de1e793997acf43405e8fa5be0 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 4 Aug 2021 23:25:26 +0300 Subject: [PATCH 28/63] homework 3 --- .../pyramid_printer/PyramidPrinterTest.java | 11 ++--- .../RandomCharsTableTest.java | 44 ++++++++----------- .../traffic_light/TrafficLightTest.java | 36 +++++---------- 3 files changed, 31 insertions(+), 60 deletions(-) diff --git a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java index 5d9fad98..b2e19e14 100644 --- a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java +++ b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java @@ -8,15 +8,10 @@ class PyramidPrinterTest { @Test - void test1() { + void testRightCasePyramidPrinter() { PyramidPrinter ppr = new PyramidPrinter(); + ppr.buildPyramidString(3); - try { - ppr.buildPyramidString(3); - } catch (ArithmeticException e) { - } catch (NumberFormatException e) { - - } final StringBuilder actual = ppr.getPyramidString(); final String expected = "x" + '\n' + "xx" + '\n' + "xxx" + '\n'; @@ -24,7 +19,7 @@ void test1() { } @Test - void test2() { + void testNegativeNumberInParameterCasePyramidPrinter() { PyramidPrinter ppr = new PyramidPrinter(); Assertions.assertThrows(ArithmeticException.class, () -> ppr.buildPyramidString(-3)); diff --git a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java index 49fc9b68..7c94f558 100644 --- a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java +++ b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java @@ -9,7 +9,7 @@ class RandomCharsTableTest { @Test - void test1() { //ODD + void testOddCaseRandomCharsTable() { RandomCharsTable rct = new RandomCharsTable(); rct.setLength(3); @@ -20,15 +20,15 @@ void test1() { //ODD final StringBuilder actualPrinting = rct.getStrForPrinting(); final StringBuilder actualPrintingByStrategy = rct.getStrForPrintingByStrategy(rct.getStrategy()); - final StringBuilder expectedPrinting = new StringBuilder("|A|M|" + "\n" + "|W|Z|" + "\n" + "|N|Q|" + "\n"); - final StringBuilder expectedPrintingByStrategy = new StringBuilder("Odd letters: A, M, W, Q"); + final String expectedPrinting = "|A|M|" + "\n" + "|W|Z|" + "\n" + "|N|Q|" + "\n"; + final String expectedPrintingByStrategy = "Odd letters: A, M, W, Q"; - assertEquals(actualPrinting.toString(), expectedPrinting.toString()); - assertEquals(actualPrintingByStrategy.toString(), expectedPrintingByStrategy.toString()); + assertEquals(actualPrinting.toString(), expectedPrinting); + assertEquals(actualPrintingByStrategy.toString(), expectedPrintingByStrategy); } @Test - void test2() { //EVEN + void testEvenCaseRandomCharsTable() { RandomCharsTable rct = new RandomCharsTable(); rct.setLength(3); @@ -39,46 +39,38 @@ void test2() { //EVEN final StringBuilder actualPrinting = rct.getStrForPrinting(); final StringBuilder actualPrintingByStrategy = rct.getStrForPrintingByStrategy(rct.getStrategy()); - final StringBuilder expectedPrinting = new StringBuilder("|A|M|" + "\n" + "|W|Z|" + "\n" + "|N|Q|" + "\n"); - final StringBuilder expectedPrintingByStrategy = new StringBuilder("Even letters: Z, N"); + final String expectedPrinting = "|A|M|" + "\n" + "|W|Z|" + "\n" + "|N|Q|" + "\n"; + final String expectedPrintingByStrategy = "Even letters: Z, N"; - assertEquals(actualPrinting.toString(), expectedPrinting.toString()); - assertEquals(actualPrintingByStrategy.toString(), expectedPrintingByStrategy.toString()); + assertEquals(actualPrinting.toString(), expectedPrinting); + assertEquals(actualPrintingByStrategy.toString(), expectedPrintingByStrategy); } @Test - void test3() { + void testWrongNumberOfParametersCaseRandomCharsTable() { RandomCharsTable rct = new RandomCharsTable(); - Assertions.assertThrows(IllegalArgumentException.class, () -> { - rct.setParameters(new String[] {"3", "4", "odd", "ODD"}); - }); + Assertions.assertThrows(IllegalArgumentException.class, () -> rct.setParameters(new String[] {"3", "4", "odd", "ODD"})); } @Test - void test4() { + void testNotANumberInParameterCaseRandomCharsTable() { RandomCharsTable rct = new RandomCharsTable(); - Assertions.assertThrows(NumberFormatException.class, () -> { - rct.setParameters(new String[] {"3", "j", "ODD"}); - }); + Assertions.assertThrows(NumberFormatException.class, () -> rct.setParameters(new String[] {"3", "j", "ODD"})); } @Test - void test5() { + void testNegativeNumberInParameterCaseRandomCharsTable() { RandomCharsTable rct = new RandomCharsTable(); - Assertions.assertThrows(IllegalArgumentException.class, () -> { - rct.setParameters(new String[] {"3", "-2", "EVEN"}); - }); + Assertions.assertThrows(IllegalArgumentException.class, () -> rct.setParameters(new String[] {"3", "-2", "EVEN"})); } @Test - void test6() { + void testWrongStrategyInParameterCaseRandomCharsTable() { RandomCharsTable rct = new RandomCharsTable(); - Assertions.assertThrows(IllegalArgumentException.class, () -> { - rct.setParameters(new String[] {"3", "2", "eeven"}); - }); + Assertions.assertThrows(IllegalArgumentException.class, () -> rct.setParameters(new String[] {"3", "2", "eeven"})); } } diff --git a/src/test/java/homework_2/traffic_light/TrafficLightTest.java b/src/test/java/homework_2/traffic_light/TrafficLightTest.java index 87efcd2d..33130fc1 100644 --- a/src/test/java/homework_2/traffic_light/TrafficLightTest.java +++ b/src/test/java/homework_2/traffic_light/TrafficLightTest.java @@ -8,13 +8,9 @@ class TrafficLightTest { @Test - void test1() { + void testGreenCaseTrafficLight() throws TrafficLight.WrongSecondsException { TrafficLight trl = new TrafficLight(); - - try { - trl.setTrafficLightColour(11); - } catch (TrafficLight.WrongSecondsException e) { - } + trl.setTrafficLightColour(11); final String actual = trl.getTrafficLightColour().toString(); final String expected = "GREEN"; @@ -23,13 +19,9 @@ void test1() { } @Test - void test2() { + void testYellowCaseTrafficLight() throws TrafficLight.WrongSecondsException { TrafficLight trl = new TrafficLight(); - - try { - trl.setTrafficLightColour(37); - } catch (TrafficLight.WrongSecondsException e) { - } + trl.setTrafficLightColour(37); final String actual = trl.getTrafficLightColour().toString(); final String expected = "YELLOW"; @@ -38,13 +30,9 @@ void test2() { } @Test - void test3() { + void testRedCaseTrafficLight() throws TrafficLight.WrongSecondsException { TrafficLight trl = new TrafficLight(); - - try { - trl.setTrafficLightColour(53); - } catch (TrafficLight.WrongSecondsException e) { - } + trl.setTrafficLightColour(53); final String actual = trl.getTrafficLightColour().toString(); final String expected = "RED"; @@ -53,20 +41,16 @@ void test3() { } @Test - void test4() { + void testNegativeSecondsTrafficLight() { TrafficLight trl = new TrafficLight(); - Assertions.assertThrows(TrafficLight.WrongSecondsException.class, () -> { - trl.setTrafficLightColour(-37); - }); + Assertions.assertThrows(TrafficLight.WrongSecondsException.class, () -> trl.setTrafficLightColour(-37)); } @Test - void test5() { + void testTooBigValueSecondsCaseTrafficLight() { TrafficLight trl = new TrafficLight(); - Assertions.assertThrows(TrafficLight.WrongSecondsException.class, () -> { - trl.setTrafficLightColour(86401); - }); + Assertions.assertThrows(TrafficLight.WrongSecondsException.class, () -> trl.setTrafficLightColour(86401)); } } \ No newline at end of file From aa81195aaa5226bea8bd614d5948fd7719626931 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Fri, 13 Aug 2021 11:25:35 +0300 Subject: [PATCH 29/63] homework 4 --- .../custom_annotation/CustomAnnotation.java | 8 ++ .../homework_4/custom_annotation/Main.java | 9 ++ .../custom_file_reader/CustomFileReader.java | 130 ++++++++++++++++++ .../homework_4/custom_file_reader/Main.java | 11 ++ src/main/java/homework_4/singleton/Main.java | 9 ++ .../java/homework_4/singleton/Singleton.java | 7 + src/main/resources/custom_file_reader.txt | 28 ++++ .../CustomFileReaderTest.java | 130 ++++++++++++++++++ 8 files changed, 332 insertions(+) create mode 100644 src/main/java/homework_4/custom_annotation/CustomAnnotation.java create mode 100644 src/main/java/homework_4/custom_annotation/Main.java create mode 100644 src/main/java/homework_4/custom_file_reader/CustomFileReader.java create mode 100644 src/main/java/homework_4/custom_file_reader/Main.java create mode 100644 src/main/java/homework_4/singleton/Main.java create mode 100644 src/main/java/homework_4/singleton/Singleton.java create mode 100644 src/main/resources/custom_file_reader.txt create mode 100644 src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java diff --git a/src/main/java/homework_4/custom_annotation/CustomAnnotation.java b/src/main/java/homework_4/custom_annotation/CustomAnnotation.java new file mode 100644 index 00000000..ca8c5514 --- /dev/null +++ b/src/main/java/homework_4/custom_annotation/CustomAnnotation.java @@ -0,0 +1,8 @@ +package homework_4.custom_annotation; + +public class CustomAnnotation { + + public void run() { + + } +} diff --git a/src/main/java/homework_4/custom_annotation/Main.java b/src/main/java/homework_4/custom_annotation/Main.java new file mode 100644 index 00000000..1ba8f2bf --- /dev/null +++ b/src/main/java/homework_4/custom_annotation/Main.java @@ -0,0 +1,9 @@ +package homework_4.custom_annotation; + + +public class Main { + + public static void main(String[] args) { + new CustomAnnotation().run(); + } +} \ No newline at end of file diff --git a/src/main/java/homework_4/custom_file_reader/CustomFileReader.java b/src/main/java/homework_4/custom_file_reader/CustomFileReader.java new file mode 100644 index 00000000..bdd98c42 --- /dev/null +++ b/src/main/java/homework_4/custom_file_reader/CustomFileReader.java @@ -0,0 +1,130 @@ +package homework_4.custom_file_reader; + +import java.io.*; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.nio.charset.StandardCharsets; + +public class CustomFileReader { + + public void run1() { + String str; + + try { + str = readFileFileReader("src/main/resources/custom_file_reader.txt"); + String str2 = replaceDotsCommas(str); + print(str2); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void run2() { + String str; + RandomAccessFile file = null; + + try { + file = getFile("src/main/resources/custom_file_reader.txt"); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + try { + str = readFileInChannel(file); + String str2 = replaceDotsCommas(str); + print(str2); + } catch (NullPointerException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void run3() { + String str; + + try { + str = readFileInputStream("src/main/resources/custom_file_reader.txt"); + String str2 = replaceDotsCommas(str); + print(str2); + } catch (NullPointerException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public String readFileFileReader(String path) throws IOException { + StringBuilder strb = new StringBuilder(); + + try (FileReader reader = new FileReader(path)) { + int i; + + while ((i = reader.read()) != -1) { + strb.append((char) i); + } + } catch (IOException e) { + throw new IOException(e.getMessage()); + } + + return strb.toString(); + } + + public RandomAccessFile getFile (String path) throws FileNotFoundException { + RandomAccessFile file; + + try { + file = new RandomAccessFile(path, "r"); + } catch (FileNotFoundException e) { + throw new FileNotFoundException(e.getMessage()); + } + + return file; + } + + public String readFileInChannel(RandomAccessFile file) throws IOException { + FileChannel channel = file.getChannel(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + int bufferSize = 1024; + if (bufferSize > channel.size()) { + bufferSize = (int) channel.size(); + } + ByteBuffer buff = ByteBuffer.allocate(bufferSize); + + while (channel.read(buff) > 0) { + out.write(buff.array(), 0, buff.position()); + buff.clear(); + } + String fileContent = new String(out.toByteArray(), StandardCharsets.UTF_8); + file.close(); + out.close(); + channel.close(); + + return fileContent; + } + + public String readFileInputStream(String path) throws IOException { + StringBuilder strb = new StringBuilder(); + FileInputStream fileInputStream = new FileInputStream(path); + BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream, 200); + + int i; + while ((i = bufferedInputStream.read()) != -1) { + strb.append((char) i); + } + fileInputStream.close(); + bufferedInputStream.close(); + + return strb.toString(); + } + + public String replaceDotsCommas(String str) { + String str2 = str.replaceAll("\\.", ""); + return str2.replaceAll(",", ""); + } + + public void print(String str) { + System.out.println(str); + } +} diff --git a/src/main/java/homework_4/custom_file_reader/Main.java b/src/main/java/homework_4/custom_file_reader/Main.java new file mode 100644 index 00000000..f43bae20 --- /dev/null +++ b/src/main/java/homework_4/custom_file_reader/Main.java @@ -0,0 +1,11 @@ +package homework_4.custom_file_reader; + + +public class Main { + + public static void main(String[] args) { + new CustomFileReader().run1(); + new CustomFileReader().run2(); + new CustomFileReader().run3(); + } +} \ No newline at end of file diff --git a/src/main/java/homework_4/singleton/Main.java b/src/main/java/homework_4/singleton/Main.java new file mode 100644 index 00000000..a23e557a --- /dev/null +++ b/src/main/java/homework_4/singleton/Main.java @@ -0,0 +1,9 @@ +package homework_4.singleton; + + +public class Main { + + public static void main(String[] args) { + new Singleton().run(); + } +} \ No newline at end of file diff --git a/src/main/java/homework_4/singleton/Singleton.java b/src/main/java/homework_4/singleton/Singleton.java new file mode 100644 index 00000000..935a4461 --- /dev/null +++ b/src/main/java/homework_4/singleton/Singleton.java @@ -0,0 +1,7 @@ +package homework_4.singleton; + +public class Singleton { + public void run() { + + } +} diff --git a/src/main/resources/custom_file_reader.txt b/src/main/resources/custom_file_reader.txt new file mode 100644 index 00000000..445972b6 --- /dev/null +++ b/src/main/resources/custom_file_reader.txt @@ -0,0 +1,28 @@ +You think I'm delirious with malaria? + +This happened. +In Odessa, this happened. + +"I'll come at four," promised Maria. + +Eight... +Nine... +Ten. + +Soon after, +The evening, +Frowning, +And Decemberish, + +Left the windows +And vanished in dire darkness. + +Behind me, I hear the neighing and laughter +Of candelabras. + +You wouldn't recognize me if you knew me prior: +A bulk of sinews +Moaning, +Fidgeting. +What can such a clod desire? +But a clod desires many things. \ No newline at end of file diff --git a/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java b/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java new file mode 100644 index 00000000..58a844a1 --- /dev/null +++ b/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java @@ -0,0 +1,130 @@ +package homework_4.custom_file_reader; + +import org.junit.jupiter.api.Test; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; + +import static org.junit.jupiter.api.Assertions.*; + + +class CustomFileReaderTest { + + @Test + void testRightCaseFileReaderCustomFileReader() { + CustomFileReader cfr = new CustomFileReader(); + String str = null; + + try { + str = cfr.readFileFileReader("src/main/resources/custom_file_reader.txt"); + } catch (IOException e) { + e.printStackTrace(); + } + + final String actual = cfr.replaceDotsCommas(str); + + assertEquals(getExpectedText(), actual); + } + + @Test + void testWrongCaseFileReaderCustomFileReader() { + CustomFileReader cfr = new CustomFileReader(); + assertThrows(IOException.class, () -> cfr.readFileFileReader("src/main/resources/custom_file_reader1.txt")); + } + + @Test + void testRightCaseInChannelCustomFileReader() { + CustomFileReader cfr = new CustomFileReader(); + String str = null; + RandomAccessFile file = null; + try { + file = cfr.getFile("src/main/resources/custom_file_reader.txt"); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + try { + str = cfr.readFileInChannel(file); + file.close(); + } catch (IOException e) { + e.printStackTrace(); + } + String str2 = cfr.replaceDotsCommas(str); + + final String actual = cfr.replaceDotsCommas(str); + + assertEquals(getExpectedText(), actual); + } + + @Test + void testWrongCase1InChannelCustomFileReader() { + CustomFileReader cfr = new CustomFileReader(); + assertThrows(FileNotFoundException.class, () -> cfr.getFile("src/main/resources/custom_file_reader1.txt")); + } + + @Test + void testWrongCase2InChannelCustomFileReader() { + CustomFileReader cfr = new CustomFileReader(); + assertThrows(NullPointerException.class, () -> cfr.readFileInChannel(null)); + } + + @Test + void testRightCaseInputStreamCustomFileReader() { + CustomFileReader cfr = new CustomFileReader(); + String str = null; + + try { + str = cfr.readFileInputStream("src/main/resources/custom_file_reader.txt"); + } catch (IOException e) { + e.printStackTrace(); + } + + final String actual = cfr.replaceDotsCommas(str); + + assertEquals(getExpectedText(), actual); + } + + @Test + void testWrongCase1InputStreamCustomFileReader() { + CustomFileReader cfr = new CustomFileReader(); + assertThrows(IOException.class, () -> cfr.readFileInputStream("src/main/resources/custom_file_reader1.txt")); + } + + @Test + void testWrongCase2InputStreamCustomFileReader() { + CustomFileReader cfr = new CustomFileReader(); + assertThrows(NullPointerException.class, () -> cfr.readFileInputStream(null)); + } + + private String getExpectedText() { + return "You think I'm delirious with malaria?" + '\r' + '\n' + + '\r' + '\n' + + "This happened" + '\r' + '\n' + + "In Odessa this happened" + '\r' + '\n' + + '\r' + '\n' + + "\"I'll come at four\" promised Maria" + '\r' + '\n' + + '\r' + '\n' + + "Eight" + '\r' + '\n' + + "Nine" + '\r' + '\n' + + "Ten" + '\r' + '\n' + + '\r' + '\n' + + "Soon after" + '\r' + '\n' + + "The evening" + '\r' + '\n' + + "Frowning" + '\r' + '\n' + + "And Decemberish" + '\r' + '\n' + + '\r' + '\n' + + "Left the windows" + '\r' + '\n' + + "And vanished in dire darkness" + '\r' + '\n' + + '\r' + '\n' + + "Behind me I hear the neighing and laughter" + '\r' + '\n' + + "Of candelabras" + '\r' + '\n' + + '\r' + '\n' + + "You wouldn't recognize me if you knew me prior:" + '\r' + '\n' + + "A bulk of sinews" + '\r' + '\n' + + "Moaning" + '\r' + '\n' + + "Fidgeting" + '\r' + '\n' + + "What can such a clod desire?" + '\r' + '\n' + + "But a clod desires many things"; + } +} \ No newline at end of file From 2d4c49495b1503e36f2ed1b9bd389b8e6e4fb60f Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Fri, 13 Aug 2021 14:22:26 +0300 Subject: [PATCH 30/63] homework 4 --- src/main/java/homework_4/singleton/Main.java | 2 +- .../java/homework_4/singleton/Singleton.java | 34 ++++++++++++++++++ .../CustomFileReaderTest.java | 10 ++++-- .../homework_4/singleton/SingletonTest.java | 36 +++++++++++++++++++ 4 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 src/test/java/homework_4/singleton/SingletonTest.java diff --git a/src/main/java/homework_4/singleton/Main.java b/src/main/java/homework_4/singleton/Main.java index a23e557a..174893f9 100644 --- a/src/main/java/homework_4/singleton/Main.java +++ b/src/main/java/homework_4/singleton/Main.java @@ -4,6 +4,6 @@ public class Main { public static void main(String[] args) { - new Singleton().run(); + Singleton.getInstance("Dobrynya").run(); } } \ No newline at end of file diff --git a/src/main/java/homework_4/singleton/Singleton.java b/src/main/java/homework_4/singleton/Singleton.java index 935a4461..d4a151b3 100644 --- a/src/main/java/homework_4/singleton/Singleton.java +++ b/src/main/java/homework_4/singleton/Singleton.java @@ -1,7 +1,41 @@ package homework_4.singleton; +import lombok.Data; + +import java.util.Random; + +@Data public class Singleton { + private static volatile Singleton instance; + private int age; + private String name; + public void run() { + Singleton singleGameHero2 = Singleton.getInstance("Ilya"); + System.out.println(this.hashCode() + ", age: " + this.getAge() + ", name: " + this.getName()); + System.out.println(singleGameHero2.hashCode() + ", age: " + singleGameHero2.getAge() + ", name: " + singleGameHero2.getName()); + } + + private Singleton() {} + private Singleton(String name) { + this.name = name; + this.age = new Random().nextInt(17) + 34; + } + + public static Singleton getInstance(String name) { + Singleton localGameHero = instance; + + if (localGameHero == null) { + synchronized (Singleton.class) { + localGameHero = instance; + if (localGameHero == null) { + instance = localGameHero = new Singleton(name); + } + } + } + + return localGameHero; } } + diff --git a/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java b/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java index 58a844a1..ee7499dc 100644 --- a/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java +++ b/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java @@ -1,11 +1,9 @@ package homework_4.custom_file_reader; import org.junit.jupiter.api.Test; - import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; - import static org.junit.jupiter.api.Assertions.*; @@ -28,11 +26,17 @@ void testRightCaseFileReaderCustomFileReader() { } @Test - void testWrongCaseFileReaderCustomFileReader() { + void testWrongCase1FileReaderCustomFileReader() { CustomFileReader cfr = new CustomFileReader(); assertThrows(IOException.class, () -> cfr.readFileFileReader("src/main/resources/custom_file_reader1.txt")); } + @Test + void testWrongCase2FileReaderCustomFileReader() { + CustomFileReader cfr = new CustomFileReader(); + assertThrows(NullPointerException.class, () -> cfr.getFile(null)); + } + @Test void testRightCaseInChannelCustomFileReader() { CustomFileReader cfr = new CustomFileReader(); diff --git a/src/test/java/homework_4/singleton/SingletonTest.java b/src/test/java/homework_4/singleton/SingletonTest.java new file mode 100644 index 00000000..758bb390 --- /dev/null +++ b/src/test/java/homework_4/singleton/SingletonTest.java @@ -0,0 +1,36 @@ +package homework_4.singleton; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; + +import java.util.Random; + + +class SingletonTest { + + @Test + void testSingleton() { + Singleton singleGameHero = Singleton.getInstance("Dobrynya"); + Singleton singleGameHero2 = Singleton.getInstance("Ilya"); + + Assertions.assertEquals(singleGameHero.getName(), singleGameHero2.getName()); + Assertions.assertEquals(singleGameHero.getAge(), singleGameHero2.getAge()); + Assertions.assertEquals(singleGameHero.hashCode(), singleGameHero2.hashCode()); + } + + @Test + void testWithChangingSingleton() { + Singleton singleGameHero = Singleton.getInstance("Dobrynya"); + Singleton singleGameHero2 = Singleton.getInstance("Ilya"); + + singleGameHero.setAge(20); + singleGameHero2.setAge(30); + singleGameHero.setName("Alosha"); + singleGameHero.setName("Svyatogog"); + + Assertions.assertEquals(singleGameHero.getName(), singleGameHero2.getName()); + Assertions.assertEquals(singleGameHero.getAge(), singleGameHero2.getAge()); + Assertions.assertEquals(singleGameHero.hashCode(), singleGameHero2.hashCode()); + } +} \ No newline at end of file From bbc435c8e74dadea25e08153d0c141dcf04b0a85 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Fri, 13 Aug 2021 18:38:03 +0300 Subject: [PATCH 31/63] homework 4 --- .../custom_annotation/CustomAnnotation.java | 16 ++++++++++++---- .../homework_4/custom_annotation/Main.java | 9 ++++++++- .../java/homework_4/singleton/Singleton.java | 4 ++-- .../CustomAnnotationTest.java | 18 ++++++++++++++++++ 4 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 src/test/java/homework_4/custom_annotation/CustomAnnotationTest.java diff --git a/src/main/java/homework_4/custom_annotation/CustomAnnotation.java b/src/main/java/homework_4/custom_annotation/CustomAnnotation.java index ca8c5514..256d196e 100644 --- a/src/main/java/homework_4/custom_annotation/CustomAnnotation.java +++ b/src/main/java/homework_4/custom_annotation/CustomAnnotation.java @@ -1,8 +1,16 @@ package homework_4.custom_annotation; -public class CustomAnnotation { +import homework_3.library.Author; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; - public void run() { - } -} +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface CustomAnnotation { + float v() default 1.1f; + Author DEFAULT_AUTHOR = new Author("Rog Elena", "Russia", null); + String DEFAULT_COUNTRY = DEFAULT_AUTHOR.getCountry(); +} \ No newline at end of file diff --git a/src/main/java/homework_4/custom_annotation/Main.java b/src/main/java/homework_4/custom_annotation/Main.java index 1ba8f2bf..2e277e6f 100644 --- a/src/main/java/homework_4/custom_annotation/Main.java +++ b/src/main/java/homework_4/custom_annotation/Main.java @@ -1,9 +1,16 @@ package homework_4.custom_annotation; +@CustomAnnotation(v = 1.2f) public class Main { public static void main(String[] args) { - new CustomAnnotation().run(); + new Main().run(); + } + + public void run() { + CustomAnnotation annotation = Main.class.getAnnotation(CustomAnnotation.class); + + System.out.println("Author: " + annotation.DEFAULT_AUTHOR + " (" + annotation.DEFAULT_COUNTRY + "), version: " + annotation.v()); } } \ No newline at end of file diff --git a/src/main/java/homework_4/singleton/Singleton.java b/src/main/java/homework_4/singleton/Singleton.java index d4a151b3..af73d7bc 100644 --- a/src/main/java/homework_4/singleton/Singleton.java +++ b/src/main/java/homework_4/singleton/Singleton.java @@ -1,9 +1,9 @@ package homework_4.singleton; import lombok.Data; - import java.util.Random; + @Data public class Singleton { private static volatile Singleton instance; @@ -12,6 +12,7 @@ public class Singleton { public void run() { Singleton singleGameHero2 = Singleton.getInstance("Ilya"); + System.out.println(this.hashCode() + ", age: " + this.getAge() + ", name: " + this.getName()); System.out.println(singleGameHero2.hashCode() + ", age: " + singleGameHero2.getAge() + ", name: " + singleGameHero2.getName()); } @@ -34,7 +35,6 @@ public static Singleton getInstance(String name) { } } } - return localGameHero; } } diff --git a/src/test/java/homework_4/custom_annotation/CustomAnnotationTest.java b/src/test/java/homework_4/custom_annotation/CustomAnnotationTest.java new file mode 100644 index 00000000..79e9588c --- /dev/null +++ b/src/test/java/homework_4/custom_annotation/CustomAnnotationTest.java @@ -0,0 +1,18 @@ +package homework_4.custom_annotation; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + + +class CustomAnnotationTest { + Main main = new Main(); + + @Test + void testCustomAnnotation() { + CustomAnnotation annotation = Main.class.getAnnotation(CustomAnnotation.class); + + Assertions.assertEquals(annotation.DEFAULT_AUTHOR.getName(), "Rog Elena"); + Assertions.assertEquals(annotation.DEFAULT_COUNTRY, "Russia"); + Assertions.assertEquals(annotation.v(), 1.2f); + } +} \ No newline at end of file From e3683a6db4638e1d80c21c8f47d684a03bdce235 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Fri, 13 Aug 2021 18:42:25 +0300 Subject: [PATCH 32/63] homework 4 --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index cba8b60c..8c2ae7d9 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,13 @@ | Number | Solution | Short description | --- | --- | --- | | HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | -| HW2. TrafficLight | [Traffic Light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/traffic_light) | traffic_light | -| HW2. PyramidPrinter | [Pyramid Printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/pyramid_printer) | pyramid_printer | -| HW2. RandomCharsTable | [Random Chars Table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/random_chars_table) | random_chars_table | -| HW3 | [Immutable Class](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_3) | ImmutableClass | +| HW2. TrafficLight | [Traffic light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/traffic_light) | traffic_light | +| HW2. PyramidPrinter | [Pyramid printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/pyramid_printer) | pyramid_printer | +| HW2. RandomCharsTable | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/random_chars_table) | random_chars_table | +| HW3 | [Immutable class](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_3) | ImmutableClass | +| HW4. CustomFileReader | [Custom file reader](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_file_reader) | custom_file_reader | +| HW4. Singleton | [Singleton](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/singleton) | singleton | +| HW4. CustomAnnotation | [Custom annotation](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_annotation) | custom_annotation | | tests | [Test classes](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/test/java) | Test classes | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) From 6c4adab58942714cf1a7892cf5e9c01911d1cd12 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 1 Sep 2021 12:14:28 +0300 Subject: [PATCH 33/63] homework 5 --- .../java/homework_5/power_of_number/Main.java | 9 ++++ .../power_of_number/PowerOfNumber.java | 47 +++++++++++++++++++ .../power_of_number/PowerOfNumberTest.java | 41 ++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 src/main/java/homework_5/power_of_number/Main.java create mode 100644 src/main/java/homework_5/power_of_number/PowerOfNumber.java create mode 100644 src/test/java/homework_5/power_of_number/PowerOfNumberTest.java diff --git a/src/main/java/homework_5/power_of_number/Main.java b/src/main/java/homework_5/power_of_number/Main.java new file mode 100644 index 00000000..f8ac9c46 --- /dev/null +++ b/src/main/java/homework_5/power_of_number/Main.java @@ -0,0 +1,9 @@ +package homework_5.power_of_number; + + +public class Main { + + public static void main(String[] args) { + new PowerOfNumber().run(); + } +} \ No newline at end of file diff --git a/src/main/java/homework_5/power_of_number/PowerOfNumber.java b/src/main/java/homework_5/power_of_number/PowerOfNumber.java new file mode 100644 index 00000000..f32093c1 --- /dev/null +++ b/src/main/java/homework_5/power_of_number/PowerOfNumber.java @@ -0,0 +1,47 @@ +package homework_5.power_of_number; + + +import java.util.InputMismatchException; +import java.util.Scanner; + + +class PowerOfNumber { + + public void run() { + + try (Scanner scanner = new Scanner(System.in)) { + String[] arr = scanner.nextLine().trim().split("\\s"); + int[] numbers = validateNumbers(arr); + int result = calculateNumberInPower(numbers[0], numbers[1]); + + System.out.println(result); + } catch (NumberFormatException | InputMismatchException ex) { + System.out.println("Only two non-negative integer is allowed!"); + } + } + + public int[] validateNumbers(String[] arr) { + int[] numbers = new int[2]; + + if (arr.length != 2) { + throw new InputMismatchException(); + } + numbers[0] = Integer.parseInt(arr[0]); + numbers[1] = Integer.parseInt(arr[1]); + + for (int i : numbers) { + if (i < 0) { + throw new InputMismatchException(); + } + } + + return numbers; + } + + public int calculateNumberInPower(int number, int power) { + if (power == 0) { + return 1; + } + return number * calculateNumberInPower(number, power - 1); + } +} \ No newline at end of file diff --git a/src/test/java/homework_5/power_of_number/PowerOfNumberTest.java b/src/test/java/homework_5/power_of_number/PowerOfNumberTest.java new file mode 100644 index 00000000..4850959c --- /dev/null +++ b/src/test/java/homework_5/power_of_number/PowerOfNumberTest.java @@ -0,0 +1,41 @@ +package homework_5.power_of_number; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.InputMismatchException; + +import static org.junit.jupiter.api.Assertions.*; + +class PowerOfNumberTest { + + @Test + void testRightCasePowerOfNumber() { + PowerOfNumber pon = new PowerOfNumber(); + + assertEquals(pon.calculateNumberInPower(3, 3), 27); + assertEquals(pon.calculateNumberInPower(0, 3), 0); + assertEquals(pon.calculateNumberInPower(2, 0), 1); + } + + @Test + void testNotANumberCasePowerOfNumber() { + PowerOfNumber pon = new PowerOfNumber(); + Assertions.assertThrows(NumberFormatException.class, () -> pon.validateNumbers(new String[]{"j", "2"})); + Assertions.assertThrows(NumberFormatException.class, () -> pon.validateNumbers(new String[]{"2", "k"})); + Assertions.assertThrows(NumberFormatException.class, () -> pon.validateNumbers(new String[]{"j", "k"})); + } + + @Test + void testWrongAmountOfNumbersCasePowerOfNumber() { + PowerOfNumber pon = new PowerOfNumber(); + Assertions.assertThrows(InputMismatchException.class, () -> pon.validateNumbers(new String[]{"2", "3", "3"})); + Assertions.assertThrows(InputMismatchException.class, () -> pon.validateNumbers(new String[]{"3"})); + } + @Test + void testNegativeNumberCasePowerOfNumber() { + PowerOfNumber pon = new PowerOfNumber(); + Assertions.assertThrows(InputMismatchException.class, () -> pon.validateNumbers(new String[]{"-3", "3"})); + Assertions.assertThrows(InputMismatchException.class, () -> pon.validateNumbers(new String[]{"3", "-3"})); + } +} \ No newline at end of file From 3f9bde2cc0fe5381dab0414517f947555f70a08d Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 1 Sep 2021 16:08:55 +0300 Subject: [PATCH 34/63] homework 5 --- .../CustomRegexMatcher.java | 30 +++++++++++++++ .../homework_5/custom_regex_matcher/Main.java | 9 +++++ .../CustomRegexMatcherTest.java | 37 +++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 src/main/java/homework_5/custom_regex_matcher/CustomRegexMatcher.java create mode 100644 src/main/java/homework_5/custom_regex_matcher/Main.java create mode 100644 src/test/java/homework_5/custom_regex_matcher/CustomRegexMatcherTest.java diff --git a/src/main/java/homework_5/custom_regex_matcher/CustomRegexMatcher.java b/src/main/java/homework_5/custom_regex_matcher/CustomRegexMatcher.java new file mode 100644 index 00000000..d6933d14 --- /dev/null +++ b/src/main/java/homework_5/custom_regex_matcher/CustomRegexMatcher.java @@ -0,0 +1,30 @@ +package homework_5.custom_regex_matcher; + + +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +class CustomRegexMatcher { + + public void run() { + + try (Scanner scanner = new Scanner(System.in)) { + String str = scanner.nextLine(); + //String str = "Java_Core_June_2021.package homework_5.custom_regex_matcher"; + String regex = ".[package\\s][homework_][1-9]+[.]."; + boolean result = validateString(str, regex); + + System.out.println(result); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + public boolean validateString(String str, String regex) { + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(str); + return matcher.find(); + } +} \ No newline at end of file diff --git a/src/main/java/homework_5/custom_regex_matcher/Main.java b/src/main/java/homework_5/custom_regex_matcher/Main.java new file mode 100644 index 00000000..e3d48fe1 --- /dev/null +++ b/src/main/java/homework_5/custom_regex_matcher/Main.java @@ -0,0 +1,9 @@ +package homework_5.custom_regex_matcher; + + +public class Main { + + public static void main(String[] args) { + new CustomRegexMatcher().run(); + } +} \ No newline at end of file diff --git a/src/test/java/homework_5/custom_regex_matcher/CustomRegexMatcherTest.java b/src/test/java/homework_5/custom_regex_matcher/CustomRegexMatcherTest.java new file mode 100644 index 00000000..2811c513 --- /dev/null +++ b/src/test/java/homework_5/custom_regex_matcher/CustomRegexMatcherTest.java @@ -0,0 +1,37 @@ +package homework_5.custom_regex_matcher; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CustomRegexMatcherTest { + + @Test + void testRightCaseCustomRegexMatcher() { + CustomRegexMatcher crm = new CustomRegexMatcher(); + + String str = "Java_Core_June_2021.package homework_5.custom_regex_matcher"; + String str2 = "Java_Core_June_2019...package homework_5.custom_regex_matcher"; + String str3 = "Java_Core_June_2019.package homework_444466665.custom_regex_matcher"; + String regex = ".[package\\s][homework_][1-9]+[.]."; + + Assertions.assertTrue(crm.validateString(str, regex)); + Assertions.assertTrue(crm.validateString(str2, regex)); + Assertions.assertTrue(crm.validateString(str3, regex)); + } + + @Test + void testWrongCaseCustomRegexMatcher() { + CustomRegexMatcher crm = new CustomRegexMatcher(); + + String str = "Java_Core_June_2021.package homework5.custom_regex_matcher"; + String str2 = "Java_Core_June_2021.package_homework.custom_regex_matcher"; + String str3 = "Java_Core_June_2021.package_homework"; + String regex = ".[package\\s][homework_][1-9]+[.]."; + + Assertions.assertFalse(crm.validateString(str, regex)); + Assertions.assertFalse(crm.validateString(str2, regex)); + Assertions.assertFalse(crm.validateString(str3, regex)); + } +} \ No newline at end of file From 8b63633e6361a63e7b09bb11ba67f61cdfd3fe84 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 1 Sep 2021 16:12:00 +0300 Subject: [PATCH 35/63] homework 5 --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 8c2ae7d9..ffc101ae 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,9 @@ | HW4. CustomFileReader | [Custom file reader](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_file_reader) | custom_file_reader | | HW4. Singleton | [Singleton](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/singleton) | singleton | | HW4. CustomAnnotation | [Custom annotation](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_annotation) | custom_annotation | +| HW5. PowerOfNumber | [Power of number](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/power_of_number) | power_of_number +| HW5. CustomRegexMatcher | [Custom regex matcher](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/custom_regex_matcher) | custom_regex_matcher + | tests | [Test classes](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/test/java) | Test classes | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) From 2010e030ea065cb19c6b020b718dabe7af9488cc Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 1 Sep 2021 16:15:17 +0300 Subject: [PATCH 36/63] homework 5 --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ffc101ae..01d936f9 100644 --- a/README.md +++ b/README.md @@ -5,15 +5,15 @@ | Number | Solution | Short description | --- | --- | --- | | HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | -| HW2. TrafficLight | [Traffic light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/traffic_light) | traffic_light | -| HW2. PyramidPrinter | [Pyramid printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/pyramid_printer) | pyramid_printer | -| HW2. RandomCharsTable | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/random_chars_table) | random_chars_table | +| HW2.1 TrafficLight | [Traffic light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/traffic_light) | traffic_light | +| HW2.2 PyramidPrinter | [Pyramid printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/pyramid_printer) | pyramid_printer | +| HW2.3 RandomCharsTable | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/random_chars_table) | random_chars_table | | HW3 | [Immutable class](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_3) | ImmutableClass | -| HW4. CustomFileReader | [Custom file reader](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_file_reader) | custom_file_reader | -| HW4. Singleton | [Singleton](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/singleton) | singleton | -| HW4. CustomAnnotation | [Custom annotation](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_annotation) | custom_annotation | -| HW5. PowerOfNumber | [Power of number](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/power_of_number) | power_of_number -| HW5. CustomRegexMatcher | [Custom regex matcher](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/custom_regex_matcher) | custom_regex_matcher +| HW4.1 CustomFileReader | [Custom file reader](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_file_reader) | custom_file_reader | +| HW4.2 Singleton | [Singleton](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/singleton) | singleton | +| HW4.3 CustomAnnotation | [Custom annotation](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_annotation) | custom_annotation | +| HW5.1 PowerOfNumber | [Power of number](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/power_of_number) | power_of_number +| HW5.2 CustomRegexMatcher | [Custom regex matcher](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/custom_regex_matcher) | custom_regex_matcher | tests | [Test classes](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/test/java) | Test classes | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) From f7f635e4d7d4d6516a542c8b6ff925e0491237aa Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Fri, 10 Sep 2021 21:16:25 +0300 Subject: [PATCH 37/63] homework 6 --- README.md | 21 +++++------ .../CollisionClass.java | 29 +++++++++++++++ .../map_problems_generator/Main.java | 7 ++++ .../MapProblemsGenerator.java | 35 +++++++++++++++++++ .../map_problems_generator/MutableClass.java | 32 +++++++++++++++++ 5 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 src/main/java/homework_6/map_problems_generator/CollisionClass.java create mode 100644 src/main/java/homework_6/map_problems_generator/Main.java create mode 100644 src/main/java/homework_6/map_problems_generator/MapProblemsGenerator.java create mode 100644 src/main/java/homework_6/map_problems_generator/MutableClass.java diff --git a/README.md b/README.md index 01d936f9..717959b5 100644 --- a/README.md +++ b/README.md @@ -4,16 +4,17 @@ | Number | Solution | Short description | --- | --- | --- | -| HW1 | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | -| HW2.1 TrafficLight | [Traffic light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/traffic_light) | traffic_light | -| HW2.2 PyramidPrinter | [Pyramid printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/pyramid_printer) | pyramid_printer | -| HW2.3 RandomCharsTable | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/random_chars_table) | random_chars_table | -| HW3 | [Immutable class](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_3) | ImmutableClass | -| HW4.1 CustomFileReader | [Custom file reader](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_file_reader) | custom_file_reader | -| HW4.2 Singleton | [Singleton](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/singleton) | singleton | -| HW4.3 CustomAnnotation | [Custom annotation](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_annotation) | custom_annotation | -| HW5.1 PowerOfNumber | [Power of number](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/power_of_number) | power_of_number -| HW5.2 CustomRegexMatcher | [Custom regex matcher](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/custom_regex_matcher) | custom_regex_matcher +| HW1. ConsolePrinter | [Console printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | +| HW2.1. TrafficLight | [Traffic light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/traffic_light) | traffic_light | +| HW2.2. PyramidPrinter | [Pyramid printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/pyramid_printer) | pyramid_printer | +| HW2.3. RandomCharsTable | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_2/random_chars_table) | random_chars_table | +| HW3. ImmutableClass | [Immutable class](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_3) | immutable_class | +| HW4.1. CustomFileReader | [Custom file reader](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_file_reader) | custom_file_reader | +| HW4.2. Singleton | [Singleton](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/singleton) | singleton | +| HW4.3. CustomAnnotation | [Custom annotation](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_annotation) | custom_annotation | +| HW5.1. PowerOfNumber | [Power of number](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/power_of_number) | power_of_number +| HW5.2. CustomRegexMatcher | [Custom regex matcher](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/custom_regex_matcher) | custom_regex_matcher +| HW6. MapProblemsGenerator | [Map problems generator](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/map_problems_generator) | map_problems_generator | tests | [Test classes](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/test/java) | Test classes | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) diff --git a/src/main/java/homework_6/map_problems_generator/CollisionClass.java b/src/main/java/homework_6/map_problems_generator/CollisionClass.java new file mode 100644 index 00000000..08cfa661 --- /dev/null +++ b/src/main/java/homework_6/map_problems_generator/CollisionClass.java @@ -0,0 +1,29 @@ +package homework_6.map_problems_generator; + +import lombok.Data; +import java.util.Calendar; + +@Data +public class CollisionClass { + private Calendar dateOfBirth; + + CollisionClass(Calendar dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + @Override + public int hashCode() { + return dateOfBirth.get(Calendar.YEAR); + } + + @Override + public boolean equals(Object obj) { + return dateOfBirth.equals(((CollisionClass) obj).getDateOfBirth()); + } + + @Override + public String toString() { + return dateOfBirth.getTime().toString(); + } +} + diff --git a/src/main/java/homework_6/map_problems_generator/Main.java b/src/main/java/homework_6/map_problems_generator/Main.java new file mode 100644 index 00000000..39d54ab1 --- /dev/null +++ b/src/main/java/homework_6/map_problems_generator/Main.java @@ -0,0 +1,7 @@ +package homework_6.map_problems_generator; + +public class Main { + public static void main(String[] args) { + new MapProblemsGenerator().run(); + } +} \ No newline at end of file diff --git a/src/main/java/homework_6/map_problems_generator/MapProblemsGenerator.java b/src/main/java/homework_6/map_problems_generator/MapProblemsGenerator.java new file mode 100644 index 00000000..c09d73b6 --- /dev/null +++ b/src/main/java/homework_6/map_problems_generator/MapProblemsGenerator.java @@ -0,0 +1,35 @@ +package homework_6.map_problems_generator; + +import java.util.*; + +public class MapProblemsGenerator { + public void run() { + + HashMap collisionMap = new HashMap<>(); + + collisionMap.put(new CollisionClass(new GregorianCalendar(1905, 1,2)), "Ayn Rand"); + collisionMap.put(new CollisionClass(new GregorianCalendar(1905, 8,18)), "Greta Garbo"); + collisionMap.put(new CollisionClass(new GregorianCalendar(1905, 11,30)), "Daniil Harms"); + + System.out.println("The same year of birth -> the same hashcode -> the same bucket:"); + collisionMap.forEach((key, value) -> System.out.println("hashcode " + key.hashCode() + ": " + key + ", " + value)); + System.out.println(); + + HashMap mutableMap = new HashMap<>(); + + MutableClass aynRandDateOfBirth = new MutableClass(new GregorianCalendar(1905, 1,2)); + MutableClass gretaGarboDateOfBirth = new MutableClass(new GregorianCalendar(1905, 8,18)); + MutableClass daniilHarmsDateOfBirth = new MutableClass(new GregorianCalendar(1905, 11,30)); + + mutableMap.put(aynRandDateOfBirth, "Ayn Rand"); + mutableMap.put(gretaGarboDateOfBirth, "Greta Garbo"); + mutableMap.put(daniilHarmsDateOfBirth, "Daniil Harms"); + mutableMap.forEach((key, value) -> System.out.println("hashcode " + key.hashCode() + ": " + key.toString() + ", " + value)); + + System.out.println("Each time new hashcode of the same element -> each time new bucket for element searching:"); + System.out.println("Ayn Rand searching: " + mutableMap.get(aynRandDateOfBirth)); + System.out.println("Greta Garbo searching: " + mutableMap.get(gretaGarboDateOfBirth)); + System.out.println("Daniil Harms searching: " + mutableMap.get(daniilHarmsDateOfBirth)); + } +} + diff --git a/src/main/java/homework_6/map_problems_generator/MutableClass.java b/src/main/java/homework_6/map_problems_generator/MutableClass.java new file mode 100644 index 00000000..b97b7473 --- /dev/null +++ b/src/main/java/homework_6/map_problems_generator/MutableClass.java @@ -0,0 +1,32 @@ +package homework_6.map_problems_generator; + +import lombok.Data; + +import java.util.Calendar; +import java.util.Random; + +@Data +public class MutableClass { + private Calendar dateOfBirth; + + MutableClass(Calendar dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + @Override + public int hashCode() { + Random random = new Random(); + return random.nextInt(); + } + + @Override + public boolean equals(Object obj) { + return dateOfBirth.equals(((MutableClass) obj).getDateOfBirth()); + } + + @Override + public String toString() { + return dateOfBirth.getTime().toString(); + } +} + From 1df85348bf316f3bab141c751979b49c2ae14219 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Fri, 10 Sep 2021 23:16:15 +0300 Subject: [PATCH 38/63] homework 7 --- src/main/java/homework_7/Cat.java | 27 +++++++++++++++++++ src/main/java/homework_7/Kitten.java | 21 +++++++++++++++ .../java/homework_7/KittenToCatFunction.java | 6 +++++ src/main/java/homework_7/Main.java | 25 +++++++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 src/main/java/homework_7/Cat.java create mode 100644 src/main/java/homework_7/Kitten.java create mode 100644 src/main/java/homework_7/KittenToCatFunction.java create mode 100644 src/main/java/homework_7/Main.java diff --git a/src/main/java/homework_7/Cat.java b/src/main/java/homework_7/Cat.java new file mode 100644 index 00000000..634ff3db --- /dev/null +++ b/src/main/java/homework_7/Cat.java @@ -0,0 +1,27 @@ +package homework_7; + +import lombok.Data; + +@Data +public class Cat { + + public enum Sex { + MALE, + FEMALE + } + + private String name; + private Sex sex; + private int ageInYears; + private String colour; + + public Cat(String name, Sex sex, int ageInYears, String colour) { + this.name = name; + this.sex = sex; + this.ageInYears = ageInYears; + this.colour = colour; + } + + public Cat() { + } +} diff --git a/src/main/java/homework_7/Kitten.java b/src/main/java/homework_7/Kitten.java new file mode 100644 index 00000000..e04734b5 --- /dev/null +++ b/src/main/java/homework_7/Kitten.java @@ -0,0 +1,21 @@ +package homework_7; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class Kitten extends Cat { + private int ageInMonths; + private String motherName; + private String fatherName; + private int kittenInLitter; + + public Kitten(String name, Sex sex, String colour, int ageInMonths, String motherName, String fatherName, int kittenInLitter) { + super(name, sex, 0, colour); + this.ageInMonths = ageInMonths; + this.motherName = motherName; + this.fatherName = fatherName; + this.kittenInLitter = kittenInLitter; + } +} diff --git a/src/main/java/homework_7/KittenToCatFunction.java b/src/main/java/homework_7/KittenToCatFunction.java new file mode 100644 index 00000000..e3beec0e --- /dev/null +++ b/src/main/java/homework_7/KittenToCatFunction.java @@ -0,0 +1,6 @@ +package homework_7; + +@FunctionalInterface +interface KittenToCatFunction { + Cat grow(Kitten kitten); +} diff --git a/src/main/java/homework_7/Main.java b/src/main/java/homework_7/Main.java new file mode 100644 index 00000000..2cc6e1a9 --- /dev/null +++ b/src/main/java/homework_7/Main.java @@ -0,0 +1,25 @@ +package homework_7; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class Main { + public static void main(String[] args) { + Kitten martha = new Kitten("Martha", Cat.Sex.FEMALE, "red", + 12, "Daina", "Boris", 3); + Kitten martin = new Kitten("Martin", Cat.Sex.MALE, "red and white", + 12, "Daina", "Boris", 3); + Kitten martisha = new Kitten("Martisha", Cat.Sex.MALE, "black and white", + 12, "Martha", "Martin", 3); + + List kittens = new ArrayList<>(); + kittens.add(martha); + kittens.add(martin); + kittens.add(martisha); + + KittenToCatFunction function = k -> new Cat(k.getName(), k.getSex(), k.getAgeInMonths() / 12, k.getColour()); + Cat[] cats = kittens.stream().map(k -> function.grow(k)).toArray(Cat[]::new); + Arrays.stream(cats).forEach(System.out::println); + } +} \ No newline at end of file From 4e1749fec1b1cb723cfe8bba152bacff01be0710 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Fri, 10 Sep 2021 23:18:31 +0300 Subject: [PATCH 39/63] homework 7 --- README.md | 1 + src/main/java/homework_7/{ => kitten_to_cat_function}/Cat.java | 2 +- .../java/homework_7/{ => kitten_to_cat_function}/Kitten.java | 2 +- .../{ => kitten_to_cat_function}/KittenToCatFunction.java | 2 +- src/main/java/homework_7/{ => kitten_to_cat_function}/Main.java | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) rename src/main/java/homework_7/{ => kitten_to_cat_function}/Cat.java (90%) rename src/main/java/homework_7/{ => kitten_to_cat_function}/Kitten.java (93%) rename src/main/java/homework_7/{ => kitten_to_cat_function}/KittenToCatFunction.java (69%) rename src/main/java/homework_7/{ => kitten_to_cat_function}/Main.java (95%) diff --git a/README.md b/README.md index 717959b5..eeebce5a 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ | HW5.1. PowerOfNumber | [Power of number](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/power_of_number) | power_of_number | HW5.2. CustomRegexMatcher | [Custom regex matcher](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/custom_regex_matcher) | custom_regex_matcher | HW6. MapProblemsGenerator | [Map problems generator](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/map_problems_generator) | map_problems_generator +| HW7. KittenToCatFunction | [Kitten to cat function](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/kitten_to_cat_function) | kitten_to_cat_function | tests | [Test classes](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/test/java) | Test classes | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) diff --git a/src/main/java/homework_7/Cat.java b/src/main/java/homework_7/kitten_to_cat_function/Cat.java similarity index 90% rename from src/main/java/homework_7/Cat.java rename to src/main/java/homework_7/kitten_to_cat_function/Cat.java index 634ff3db..89097dc8 100644 --- a/src/main/java/homework_7/Cat.java +++ b/src/main/java/homework_7/kitten_to_cat_function/Cat.java @@ -1,4 +1,4 @@ -package homework_7; +package homework_7.kitten_to_cat_function; import lombok.Data; diff --git a/src/main/java/homework_7/Kitten.java b/src/main/java/homework_7/kitten_to_cat_function/Kitten.java similarity index 93% rename from src/main/java/homework_7/Kitten.java rename to src/main/java/homework_7/kitten_to_cat_function/Kitten.java index e04734b5..e3b9abba 100644 --- a/src/main/java/homework_7/Kitten.java +++ b/src/main/java/homework_7/kitten_to_cat_function/Kitten.java @@ -1,4 +1,4 @@ -package homework_7; +package homework_7.kitten_to_cat_function; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/src/main/java/homework_7/KittenToCatFunction.java b/src/main/java/homework_7/kitten_to_cat_function/KittenToCatFunction.java similarity index 69% rename from src/main/java/homework_7/KittenToCatFunction.java rename to src/main/java/homework_7/kitten_to_cat_function/KittenToCatFunction.java index e3beec0e..4baf2ed1 100644 --- a/src/main/java/homework_7/KittenToCatFunction.java +++ b/src/main/java/homework_7/kitten_to_cat_function/KittenToCatFunction.java @@ -1,4 +1,4 @@ -package homework_7; +package homework_7.kitten_to_cat_function; @FunctionalInterface interface KittenToCatFunction { diff --git a/src/main/java/homework_7/Main.java b/src/main/java/homework_7/kitten_to_cat_function/Main.java similarity index 95% rename from src/main/java/homework_7/Main.java rename to src/main/java/homework_7/kitten_to_cat_function/Main.java index 2cc6e1a9..4f50a288 100644 --- a/src/main/java/homework_7/Main.java +++ b/src/main/java/homework_7/kitten_to_cat_function/Main.java @@ -1,4 +1,4 @@ -package homework_7; +package homework_7.kitten_to_cat_function; import java.util.ArrayList; import java.util.Arrays; From 11182b5a6754c573fc4a54af9259342fa629ab52 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 11 Sep 2021 15:31:27 +0300 Subject: [PATCH 40/63] homework 7 --- .../java/homework_7/kitten_to_cat_function/Cat.java | 3 --- .../homework_7/kitten_to_cat_function/Kitten.java | 13 ++++++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/homework_7/kitten_to_cat_function/Cat.java b/src/main/java/homework_7/kitten_to_cat_function/Cat.java index 89097dc8..cd1d226d 100644 --- a/src/main/java/homework_7/kitten_to_cat_function/Cat.java +++ b/src/main/java/homework_7/kitten_to_cat_function/Cat.java @@ -21,7 +21,4 @@ public Cat(String name, Sex sex, int ageInYears, String colour) { this.ageInYears = ageInYears; this.colour = colour; } - - public Cat() { - } } diff --git a/src/main/java/homework_7/kitten_to_cat_function/Kitten.java b/src/main/java/homework_7/kitten_to_cat_function/Kitten.java index e3b9abba..69c37eb0 100644 --- a/src/main/java/homework_7/kitten_to_cat_function/Kitten.java +++ b/src/main/java/homework_7/kitten_to_cat_function/Kitten.java @@ -1,18 +1,21 @@ package homework_7.kitten_to_cat_function; import lombok.Data; -import lombok.EqualsAndHashCode; @Data -@EqualsAndHashCode(callSuper = false) -public class Kitten extends Cat { +public class Kitten { + private String name; + private Cat.Sex sex; + private String colour; private int ageInMonths; private String motherName; private String fatherName; private int kittenInLitter; - public Kitten(String name, Sex sex, String colour, int ageInMonths, String motherName, String fatherName, int kittenInLitter) { - super(name, sex, 0, colour); + public Kitten(String name, Cat.Sex sex, String colour, int ageInMonths, String motherName, String fatherName, int kittenInLitter) { + this.name = name; + this.sex = sex; + this.colour = colour; this.ageInMonths = ageInMonths; this.motherName = motherName; this.fatherName = fatherName; From 0f833ad546ec8da52e75ca652ad746731796156c Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 11 Sep 2021 15:50:06 +0300 Subject: [PATCH 41/63] homework 7 --- src/main/java/homework_3/library/Author.java | 2 -- src/main/java/homework_3/library/LibraryCard.java | 1 - src/main/java/homework_3/library/Main.java | 1 - .../java/homework_4/custom_annotation/CustomAnnotation.java | 1 - src/main/java/homework_4/custom_annotation/Main.java | 3 --- .../homework_5/custom_regex_matcher/CustomRegexMatcher.java | 4 ---- src/main/java/homework_5/custom_regex_matcher/Main.java | 2 -- src/main/java/homework_7/kitten_to_cat_function/Cat.java | 2 -- 8 files changed, 16 deletions(-) diff --git a/src/main/java/homework_3/library/Author.java b/src/main/java/homework_3/library/Author.java index 0a70be18..d67d2159 100644 --- a/src/main/java/homework_3/library/Author.java +++ b/src/main/java/homework_3/library/Author.java @@ -1,11 +1,9 @@ package homework_3.library; import lombok.Data; -import lombok.NonNull; @Data public class Author { - private String name; private String country; private String century; diff --git a/src/main/java/homework_3/library/LibraryCard.java b/src/main/java/homework_3/library/LibraryCard.java index 5511fb07..3a9db44a 100644 --- a/src/main/java/homework_3/library/LibraryCard.java +++ b/src/main/java/homework_3/library/LibraryCard.java @@ -12,7 +12,6 @@ @Getter public final class LibraryCard { - private enum Section { MYSTERY, HORROR, diff --git a/src/main/java/homework_3/library/Main.java b/src/main/java/homework_3/library/Main.java index ceadd0e7..1582f17f 100644 --- a/src/main/java/homework_3/library/Main.java +++ b/src/main/java/homework_3/library/Main.java @@ -4,7 +4,6 @@ import java.util.GregorianCalendar; public class Main { - public static void main(String[] args) { LibraryCard lc; diff --git a/src/main/java/homework_4/custom_annotation/CustomAnnotation.java b/src/main/java/homework_4/custom_annotation/CustomAnnotation.java index 256d196e..b426e029 100644 --- a/src/main/java/homework_4/custom_annotation/CustomAnnotation.java +++ b/src/main/java/homework_4/custom_annotation/CustomAnnotation.java @@ -6,7 +6,6 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; - @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface CustomAnnotation { diff --git a/src/main/java/homework_4/custom_annotation/Main.java b/src/main/java/homework_4/custom_annotation/Main.java index 2e277e6f..301f275a 100644 --- a/src/main/java/homework_4/custom_annotation/Main.java +++ b/src/main/java/homework_4/custom_annotation/Main.java @@ -1,16 +1,13 @@ package homework_4.custom_annotation; - @CustomAnnotation(v = 1.2f) public class Main { - public static void main(String[] args) { new Main().run(); } public void run() { CustomAnnotation annotation = Main.class.getAnnotation(CustomAnnotation.class); - System.out.println("Author: " + annotation.DEFAULT_AUTHOR + " (" + annotation.DEFAULT_COUNTRY + "), version: " + annotation.v()); } } \ No newline at end of file diff --git a/src/main/java/homework_5/custom_regex_matcher/CustomRegexMatcher.java b/src/main/java/homework_5/custom_regex_matcher/CustomRegexMatcher.java index d6933d14..440b660b 100644 --- a/src/main/java/homework_5/custom_regex_matcher/CustomRegexMatcher.java +++ b/src/main/java/homework_5/custom_regex_matcher/CustomRegexMatcher.java @@ -1,15 +1,11 @@ package homework_5.custom_regex_matcher; - import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; - class CustomRegexMatcher { - public void run() { - try (Scanner scanner = new Scanner(System.in)) { String str = scanner.nextLine(); //String str = "Java_Core_June_2021.package homework_5.custom_regex_matcher"; diff --git a/src/main/java/homework_5/custom_regex_matcher/Main.java b/src/main/java/homework_5/custom_regex_matcher/Main.java index e3d48fe1..0a1aad95 100644 --- a/src/main/java/homework_5/custom_regex_matcher/Main.java +++ b/src/main/java/homework_5/custom_regex_matcher/Main.java @@ -1,8 +1,6 @@ package homework_5.custom_regex_matcher; - public class Main { - public static void main(String[] args) { new CustomRegexMatcher().run(); } diff --git a/src/main/java/homework_7/kitten_to_cat_function/Cat.java b/src/main/java/homework_7/kitten_to_cat_function/Cat.java index cd1d226d..d5eae1f7 100644 --- a/src/main/java/homework_7/kitten_to_cat_function/Cat.java +++ b/src/main/java/homework_7/kitten_to_cat_function/Cat.java @@ -4,12 +4,10 @@ @Data public class Cat { - public enum Sex { MALE, FEMALE } - private String name; private Sex sex; private int ageInYears; From 41d2cc139c7727dcc65750774d878f3e85dd5bb7 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sat, 11 Sep 2021 18:13:09 +0300 Subject: [PATCH 42/63] homework 7 --- .../java/homework_2/pyramid_printer/Main.java | 1 - .../pyramid_printer/PyramidPrinter.java | 30 +++++-------------- .../homework_2/random_chars_table/Main.java | 1 - .../random_chars_table/RandomCharsTable.java | 10 +++---- .../java/homework_2/traffic_light/Main.java | 1 - .../traffic_light/TrafficLight.java | 5 ++-- .../pyramid_printer/PyramidPrinterTest.java | 4 +-- .../RandomCharsTableTest.java | 8 +---- .../traffic_light/TrafficLightTest.java | 5 +--- .../CustomAnnotationTest.java | 3 +- .../CustomFileReaderTest.java | 6 +--- .../homework_4/singleton/SingletonTest.java | 6 +--- .../CustomRegexMatcherTest.java | 4 +-- .../power_of_number/PowerOfNumberTest.java | 5 +++- 14 files changed, 25 insertions(+), 64 deletions(-) diff --git a/src/main/java/homework_2/pyramid_printer/Main.java b/src/main/java/homework_2/pyramid_printer/Main.java index 905192d7..57072e16 100644 --- a/src/main/java/homework_2/pyramid_printer/Main.java +++ b/src/main/java/homework_2/pyramid_printer/Main.java @@ -1,7 +1,6 @@ package homework_2.pyramid_printer; public class Main { - public static void main(String[] args) { new PyramidPrinter().run(); } diff --git a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java index 64ac762a..6969fe10 100644 --- a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -1,48 +1,34 @@ package homework_2.pyramid_printer; -import lombok.Getter; -import lombok.Setter; - +import lombok.Data; import java.util.InputMismatchException; import java.util.Scanner; -@Getter -@Setter -class PyramidPrinter { - - private StringBuilder pyramidString; +@Data +public class PyramidPrinter { + private StringBuilder pyramidString = new StringBuilder(); public void run() { - try (Scanner scanner = new Scanner(System.in)) { String str = scanner.nextLine(); int number = Integer.parseInt(str); buildPyramidString(number); - printPyramid(); + System.out.println(pyramidString); } catch (ArithmeticException | InputMismatchException ex) { System.out.println("Only non-negative integer is allowed as passed parameter!"); } } - public void buildPyramidString(int number) { + void buildPyramidString(int number) { if (number < 0) { throw new ArithmeticException(); } - StringBuilder result = new StringBuilder(); - char charX = 'x'; - char newLineChar = '\n'; - for (int i = 0; i < number; i++) { for (int j = 0; j <= i; j++) { - result.append(charX); + pyramidString.append('x'); } - result.append(newLineChar); + pyramidString.append('\n'); } - setPyramidString(result); - } - - public void printPyramid() { - System.out.println(getPyramidString().toString()); } } \ No newline at end of file diff --git a/src/main/java/homework_2/random_chars_table/Main.java b/src/main/java/homework_2/random_chars_table/Main.java index bac6f2c7..bdb56ffe 100644 --- a/src/main/java/homework_2/random_chars_table/Main.java +++ b/src/main/java/homework_2/random_chars_table/Main.java @@ -1,7 +1,6 @@ package homework_2.random_chars_table; public class Main { - public static void main(String[] args) { new RandomCharsTable().run(); } diff --git a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java index f228c481..a1bd76cd 100644 --- a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java +++ b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java @@ -1,13 +1,10 @@ package homework_2.random_chars_table; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import java.util.*; -@Getter -@Setter +@Data public class RandomCharsTable { - public enum Strategy { EVEN, ODD @@ -20,8 +17,8 @@ public enum Strategy { public void run() { Scanner scanner = new Scanner(System.in); String[] arr = scanner.nextLine().trim().split("\\s"); - scanner.close(); + try { setParameters(arr); } catch (NumberFormatException ex) { @@ -32,6 +29,7 @@ public void run() { return; } initializeTable(); + System.out.println(getStrForPrinting()); System.out.println(getStrForPrintingByStrategy(getStrategy())); } diff --git a/src/main/java/homework_2/traffic_light/Main.java b/src/main/java/homework_2/traffic_light/Main.java index 26c16963..071437b1 100644 --- a/src/main/java/homework_2/traffic_light/Main.java +++ b/src/main/java/homework_2/traffic_light/Main.java @@ -1,7 +1,6 @@ package homework_2.traffic_light; public class Main { - public static void main(String[] args) { new TrafficLight().run(); } diff --git a/src/main/java/homework_2/traffic_light/TrafficLight.java b/src/main/java/homework_2/traffic_light/TrafficLight.java index 1e70eb03..6a0dc118 100644 --- a/src/main/java/homework_2/traffic_light/TrafficLight.java +++ b/src/main/java/homework_2/traffic_light/TrafficLight.java @@ -4,9 +4,8 @@ import java.util.Map; import java.util.Scanner; -class TrafficLight { - - public static enum Colour { +public class TrafficLight { + public enum Colour { RED, YELLOW, GREEN diff --git a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java index b2e19e14..2ac6cdc0 100644 --- a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java +++ b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java @@ -4,8 +4,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; - -class PyramidPrinterTest { +public class PyramidPrinterTest { @Test void testRightCasePyramidPrinter() { @@ -21,7 +20,6 @@ void testRightCasePyramidPrinter() { @Test void testNegativeNumberInParameterCasePyramidPrinter() { PyramidPrinter ppr = new PyramidPrinter(); - Assertions.assertThrows(ArithmeticException.class, () -> ppr.buildPyramidString(-3)); } } \ No newline at end of file diff --git a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java index 7c94f558..8323d3b6 100644 --- a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java +++ b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java @@ -1,12 +1,10 @@ package homework_2.random_chars_table; - import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; - -class RandomCharsTableTest { +public class RandomCharsTableTest { @Test void testOddCaseRandomCharsTable() { @@ -49,28 +47,24 @@ void testEvenCaseRandomCharsTable() { @Test void testWrongNumberOfParametersCaseRandomCharsTable() { RandomCharsTable rct = new RandomCharsTable(); - Assertions.assertThrows(IllegalArgumentException.class, () -> rct.setParameters(new String[] {"3", "4", "odd", "ODD"})); } @Test void testNotANumberInParameterCaseRandomCharsTable() { RandomCharsTable rct = new RandomCharsTable(); - Assertions.assertThrows(NumberFormatException.class, () -> rct.setParameters(new String[] {"3", "j", "ODD"})); } @Test void testNegativeNumberInParameterCaseRandomCharsTable() { RandomCharsTable rct = new RandomCharsTable(); - Assertions.assertThrows(IllegalArgumentException.class, () -> rct.setParameters(new String[] {"3", "-2", "EVEN"})); } @Test void testWrongStrategyInParameterCaseRandomCharsTable() { RandomCharsTable rct = new RandomCharsTable(); - Assertions.assertThrows(IllegalArgumentException.class, () -> rct.setParameters(new String[] {"3", "2", "eeven"})); } } diff --git a/src/test/java/homework_2/traffic_light/TrafficLightTest.java b/src/test/java/homework_2/traffic_light/TrafficLightTest.java index 33130fc1..2ef4e447 100644 --- a/src/test/java/homework_2/traffic_light/TrafficLightTest.java +++ b/src/test/java/homework_2/traffic_light/TrafficLightTest.java @@ -4,8 +4,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; - -class TrafficLightTest { +public class TrafficLightTest { @Test void testGreenCaseTrafficLight() throws TrafficLight.WrongSecondsException { @@ -43,14 +42,12 @@ void testRedCaseTrafficLight() throws TrafficLight.WrongSecondsException { @Test void testNegativeSecondsTrafficLight() { TrafficLight trl = new TrafficLight(); - Assertions.assertThrows(TrafficLight.WrongSecondsException.class, () -> trl.setTrafficLightColour(-37)); } @Test void testTooBigValueSecondsCaseTrafficLight() { TrafficLight trl = new TrafficLight(); - Assertions.assertThrows(TrafficLight.WrongSecondsException.class, () -> trl.setTrafficLightColour(86401)); } } \ No newline at end of file diff --git a/src/test/java/homework_4/custom_annotation/CustomAnnotationTest.java b/src/test/java/homework_4/custom_annotation/CustomAnnotationTest.java index 79e9588c..628f39e1 100644 --- a/src/test/java/homework_4/custom_annotation/CustomAnnotationTest.java +++ b/src/test/java/homework_4/custom_annotation/CustomAnnotationTest.java @@ -3,8 +3,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; - -class CustomAnnotationTest { +public class CustomAnnotationTest { Main main = new Main(); @Test diff --git a/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java b/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java index ee7499dc..0f1e8084 100644 --- a/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java +++ b/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java @@ -6,8 +6,7 @@ import java.io.RandomAccessFile; import static org.junit.jupiter.api.Assertions.*; - -class CustomFileReaderTest { +public class CustomFileReaderTest { @Test void testRightCaseFileReaderCustomFileReader() { @@ -19,7 +18,6 @@ void testRightCaseFileReaderCustomFileReader() { } catch (IOException e) { e.printStackTrace(); } - final String actual = cfr.replaceDotsCommas(str); assertEquals(getExpectedText(), actual); @@ -55,7 +53,6 @@ void testRightCaseInChannelCustomFileReader() { e.printStackTrace(); } String str2 = cfr.replaceDotsCommas(str); - final String actual = cfr.replaceDotsCommas(str); assertEquals(getExpectedText(), actual); @@ -83,7 +80,6 @@ void testRightCaseInputStreamCustomFileReader() { } catch (IOException e) { e.printStackTrace(); } - final String actual = cfr.replaceDotsCommas(str); assertEquals(getExpectedText(), actual); diff --git a/src/test/java/homework_4/singleton/SingletonTest.java b/src/test/java/homework_4/singleton/SingletonTest.java index 758bb390..6a462ebe 100644 --- a/src/test/java/homework_4/singleton/SingletonTest.java +++ b/src/test/java/homework_4/singleton/SingletonTest.java @@ -1,13 +1,9 @@ package homework_4.singleton; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; -import java.util.Random; - - -class SingletonTest { +public class SingletonTest { @Test void testSingleton() { diff --git a/src/test/java/homework_5/custom_regex_matcher/CustomRegexMatcherTest.java b/src/test/java/homework_5/custom_regex_matcher/CustomRegexMatcherTest.java index 2811c513..657dae75 100644 --- a/src/test/java/homework_5/custom_regex_matcher/CustomRegexMatcherTest.java +++ b/src/test/java/homework_5/custom_regex_matcher/CustomRegexMatcherTest.java @@ -3,9 +3,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; - -class CustomRegexMatcherTest { +public class CustomRegexMatcherTest { @Test void testRightCaseCustomRegexMatcher() { diff --git a/src/test/java/homework_5/power_of_number/PowerOfNumberTest.java b/src/test/java/homework_5/power_of_number/PowerOfNumberTest.java index 4850959c..a25a93e1 100644 --- a/src/test/java/homework_5/power_of_number/PowerOfNumberTest.java +++ b/src/test/java/homework_5/power_of_number/PowerOfNumberTest.java @@ -7,7 +7,7 @@ import static org.junit.jupiter.api.Assertions.*; -class PowerOfNumberTest { +public class PowerOfNumberTest { @Test void testRightCasePowerOfNumber() { @@ -21,6 +21,7 @@ void testRightCasePowerOfNumber() { @Test void testNotANumberCasePowerOfNumber() { PowerOfNumber pon = new PowerOfNumber(); + Assertions.assertThrows(NumberFormatException.class, () -> pon.validateNumbers(new String[]{"j", "2"})); Assertions.assertThrows(NumberFormatException.class, () -> pon.validateNumbers(new String[]{"2", "k"})); Assertions.assertThrows(NumberFormatException.class, () -> pon.validateNumbers(new String[]{"j", "k"})); @@ -29,12 +30,14 @@ void testNotANumberCasePowerOfNumber() { @Test void testWrongAmountOfNumbersCasePowerOfNumber() { PowerOfNumber pon = new PowerOfNumber(); + Assertions.assertThrows(InputMismatchException.class, () -> pon.validateNumbers(new String[]{"2", "3", "3"})); Assertions.assertThrows(InputMismatchException.class, () -> pon.validateNumbers(new String[]{"3"})); } @Test void testNegativeNumberCasePowerOfNumber() { PowerOfNumber pon = new PowerOfNumber(); + Assertions.assertThrows(InputMismatchException.class, () -> pon.validateNumbers(new String[]{"-3", "3"})); Assertions.assertThrows(InputMismatchException.class, () -> pon.validateNumbers(new String[]{"3", "-3"})); } From 583fa735c7ec22b6fef076c0ff8578da5d6a6336 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sun, 12 Sep 2021 14:05:23 +0300 Subject: [PATCH 43/63] homework 7 --- .../random_chars_table/RandomCharsTable.java | 34 ++++++------------- 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java index a1bd76cd..cbb712fd 100644 --- a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java +++ b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java @@ -21,9 +21,6 @@ public void run() { try { setParameters(arr); - } catch (NumberFormatException ex) { - System.out.println("Passed parameters should match the format [positive integer] [positive integer] [even|odd]!"); - return; } catch (IllegalArgumentException ex) { System.out.println("Passed parameters should match the format [positive integer] [positive integer] [even|odd]!"); return; @@ -39,28 +36,17 @@ public void setParameters(String[] arr) { throw new IllegalArgumentException(); } - for (int i = 0; i < 3; i++) { - if (i < 2) { - int j = Integer.parseInt(arr[i]); - - if (j < 1) { - throw new IllegalArgumentException(); - } - - if (i == 0) { - setLength(j); - } else { - setWidth(j); - } - } else { - String strategyStr = arr[i]; + length = Integer.parseInt(arr[0]); + width = Integer.parseInt(arr[1]); + if (length < 1 || width < 1) { + throw new IllegalArgumentException(); + } - if (Strategy.EVEN.equals(Strategy.valueOf(strategyStr.toUpperCase())) || Strategy.ODD.equals(Strategy.valueOf(strategyStr.toUpperCase()))) { - strategy = Strategy.valueOf(strategyStr.toUpperCase()); - } else { - throw new IllegalArgumentException(); - } - } + String strategyStr = arr[2]; + if (Strategy.EVEN.equals(Strategy.valueOf(strategyStr.toUpperCase())) || Strategy.ODD.equals(Strategy.valueOf(strategyStr.toUpperCase()))) { + strategy = Strategy.valueOf(strategyStr.toUpperCase()); + } else { + throw new IllegalArgumentException(); } } From 0b42b57ac44d3b4dd370d2ddd0b18f3fee91e6f3 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sun, 12 Sep 2021 14:33:18 +0300 Subject: [PATCH 44/63] homework 7 --- .../java/homework_2/pyramid_printer/PyramidPrinter.java | 8 ++++---- .../homework_2/pyramid_printer/PyramidPrinterTest.java | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java index 6969fe10..8326d8fe 100644 --- a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -6,20 +6,19 @@ @Data public class PyramidPrinter { - private StringBuilder pyramidString = new StringBuilder(); public void run() { try (Scanner scanner = new Scanner(System.in)) { String str = scanner.nextLine(); int number = Integer.parseInt(str); - buildPyramidString(number); - System.out.println(pyramidString); + System.out.println(buildPyramidString(number)); } catch (ArithmeticException | InputMismatchException ex) { System.out.println("Only non-negative integer is allowed as passed parameter!"); } } - void buildPyramidString(int number) { + StringBuilder buildPyramidString(int number) { + StringBuilder pyramidString = new StringBuilder(); if (number < 0) { throw new ArithmeticException(); } @@ -30,5 +29,6 @@ void buildPyramidString(int number) { } pyramidString.append('\n'); } + return pyramidString; } } \ No newline at end of file diff --git a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java index 2ac6cdc0..797a5831 100644 --- a/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java +++ b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java @@ -9,9 +9,8 @@ public class PyramidPrinterTest { @Test void testRightCasePyramidPrinter() { PyramidPrinter ppr = new PyramidPrinter(); - ppr.buildPyramidString(3); - final StringBuilder actual = ppr.getPyramidString(); + final StringBuilder actual = ppr.buildPyramidString(3); final String expected = "x" + '\n' + "xx" + '\n' + "xxx" + '\n'; assertEquals(actual.toString(), expected); From b875eaa527f696e68d379af30c1785ef46d40164 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Sun, 12 Sep 2021 14:54:11 +0300 Subject: [PATCH 45/63] homework 7 --- src/main/java/homework_2/pyramid_printer/PyramidPrinter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java index 8326d8fe..fc07f777 100644 --- a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -12,7 +12,7 @@ public void run() { String str = scanner.nextLine(); int number = Integer.parseInt(str); System.out.println(buildPyramidString(number)); - } catch (ArithmeticException | InputMismatchException ex) { + } catch (NumberFormatException | ArithmeticException | InputMismatchException ex) { System.out.println("Only non-negative integer is allowed as passed parameter!"); } } From 6ac20cf894a0b86a25089e1acd2b089a4ac746ef Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 20 Sep 2021 01:35:38 +0300 Subject: [PATCH 46/63] course_project --- src/main/java/course_project/Field.java | 287 ++++++++++++++++++++ src/main/java/course_project/Player.java | 76 ++++++ src/main/java/course_project/SeaBattle.java | 97 +++++++ src/main/java/course_project/Ship.java | 61 +++++ 4 files changed, 521 insertions(+) create mode 100644 src/main/java/course_project/Field.java create mode 100644 src/main/java/course_project/Player.java create mode 100644 src/main/java/course_project/SeaBattle.java create mode 100644 src/main/java/course_project/Ship.java diff --git a/src/main/java/course_project/Field.java b/src/main/java/course_project/Field.java new file mode 100644 index 00000000..bbcd7f19 --- /dev/null +++ b/src/main/java/course_project/Field.java @@ -0,0 +1,287 @@ +package course_project; + +import lombok.Data; +import java.util.*; + +@Data +public class Field { + enum cellStatus { + CLEAN, + TOUCHING, + SHIP, + WOUNDED, + SUNK, + MISS + } + private final static int fieldLength = 10; + private static final HashMap cellStatusSign = new HashMap(){{ + put(cellStatus.CLEAN, '~'); + put(cellStatus.TOUCHING, '~'); + put(cellStatus.SHIP, 'U'); + put(cellStatus.WOUNDED, 'x'); + put(cellStatus.SUNK, 'x'); + put(cellStatus.MISS, 'o'); + }}; + public static final String ANSI_RED = "\u001B[31m"; + public static final String ANSI_RESET = "\u001B[0m"; + private cellStatus[][] cells = new cellStatus[fieldLength][fieldLength]; + private List listOfShips = new ArrayList<>(); + + public static int[] stringToCell(String str) { + char columnNumberChar = str.substring(0, 1).charAt(0); + int columnNumber; + + if ((int) columnNumberChar > 74) { + return null; + } else { + columnNumber = (int) columnNumberChar - 64; + } + String lineNumberStr = str.substring(1); + + try { + int lineNumber = Integer.parseInt(lineNumberStr); + if (lineNumber > 10) { + return null; + } + return new int[]{lineNumber - 1, columnNumber - 1}; + } catch (NumberFormatException e) { + return null; + } + } + + public Field() { + for (int i = 0; i < fieldLength; i++) { + for (int j = 0; j < fieldLength; j++) { + cells[j][i] = cellStatus.CLEAN; + } + } + } + + public boolean createShip(int shipLength, String[] shipCoordinates) { + int[] beginningCell; + int[] endCell; + + if ((shipLength == 1 && shipCoordinates.length != 1) + || (shipLength > 1 && shipCoordinates.length != 2)) { + System.out.println("Error! Wrong length of the ship! Try again.\n"); + return false; + } + + beginningCell = stringToCell(shipCoordinates[0]); + endCell = shipLength == 1 ? beginningCell : stringToCell(shipCoordinates[1]); + + if (beginningCell == null || endCell == null) { + System.out.println("Error! Wrong enter! Try again.\n"); + return false; + } + + if (checkShip(shipLength, beginningCell, endCell)) { + drawShip(shipLength, beginningCell, endCell); + return true; + } + return false; + } + + private boolean checkShip(int shipLength, int[] beginningCell, int[] endCell) { + if (!cellWithinFieldBoundaries(beginningCell) || !cellWithinFieldBoundaries(endCell)) { + System.out.println("Error! Out of field bounds! Try again.\n"); + return false; + } else if (!Ship.shipIsInAStraightLine(shipLength, beginningCell, endCell)) { + System.out.println("Error! The ship is not in a straight line! Try again.\n"); + return false; + } else if (!Ship.rightShipLength(shipLength, beginningCell, endCell)) { + System.out.println("Error! Wrong length of the ship! Try again.\n"); + return false; + } else if (!cellsAbleToFill(beginningCell, endCell)) { + System.out.println("Error! This cell is not able to be filled with a ship. Try again.\n"); + return false; + } + return true; + } + + private boolean cellWithinFieldBoundaries(int[] cell) { + return cell[0] <= 9 && cell[1] <= 9 && cell[0] >= 0 && cell[1] >= 0; + } + + private boolean cellsAbleToFill(int[] beginningCell, int[] endCell) { + int[][] shipCells = getShipCells(beginningCell, endCell); + if (shipCells != null) { + for (int[] cell : shipCells) { + if (!cellCleanAndNotTouching(cell)) { + return false; + } + } + } + return true; + } + + private int[][] getShipCells(int[] beginningCell, int[] endCell) { + int[][] shipCells; + + if (beginningCell[1] == endCell[1]) { //horizontal + shipCells = new int[Math.abs(beginningCell[0] - endCell[0]) + 1][3]; + int lineMin = Math.min(beginningCell[0], endCell[0]); + int lineMax = Math.max(beginningCell[0], endCell[0]); + for (int i = 0; i <= lineMax - lineMin; i++) { + shipCells[i][0] = lineMin + i; + shipCells[i][1] = beginningCell[1]; + shipCells[i][2] = 0; //status + } + return shipCells; + } else if (beginningCell[0] == endCell[0]) { //vertical + shipCells = new int[Math.abs(beginningCell[1] - endCell[1]) + 1][3]; + int columnMin = Math.min(beginningCell[1], endCell[1]); + int columnMax = Math.max(beginningCell[1], endCell[1]); + for (int i = 0; i <= columnMax - columnMin; i++) { + shipCells[i][0] = beginningCell[0]; + shipCells[i][1] = columnMin + i; + shipCells[i][2] = 0; //status + } + return shipCells; + } + return null; + } + + private boolean cellCleanAndNotTouching(int[] cell) { + int line = cell[0]; + int column = cell[1]; + + if (cells[line][column] != cellStatus.CLEAN) { + return false; + } + + ArrayList adjacentCells = getAdjacentCells(cell); + for (int[] adjacentCell : adjacentCells) { + int adjacentLine = adjacentCell[0]; + int adjacentColumn = adjacentCell[1]; + + if (cells[adjacentLine][adjacentColumn] == cellStatus.SHIP) { + return false; + } + } + return true; + } + + private ArrayList getAdjacentCells(int[] cell) { + int column = cell[0]; + int line = cell[1]; + + ArrayList adjacentCells = new ArrayList<>(); + for (int i = line - 1; i <= line + 1; i++) { + for (int j = column - 1; j <= column + 1; j++) { + int[] checkingCell = new int[]{j, i}; + if (cellWithinFieldBoundaries(checkingCell) && !Arrays.equals(cell, checkingCell)) { + adjacentCells.add(checkingCell); + } + } + } + return adjacentCells; + } + + private void drawShip(int shipLength, int[] beginningCell, int[] endCell) { + int[][] shipCells = getShipCells(beginningCell, endCell); + listOfShips.add(new Ship(shipLength, shipCells)); + + if (shipCells != null) { + for (int[] cell : shipCells) { + int line = cell[0]; + int column = cell[1]; + cells[line][column] = cellStatus.SHIP; + + ArrayList adjacentCells = getAdjacentCells(cell); + for (int[] adjacentCell : adjacentCells) { + int adjacentColumn = adjacentCell[1]; + int adjacentLine = adjacentCell[0]; + + if (cells[adjacentLine][adjacentColumn] != cellStatus.SHIP) { + cells[adjacentLine][adjacentColumn] = cellStatus.TOUCHING; + } + } + } + } + } + + boolean allShipsSunk() { + for (Ship ship : listOfShips) { + if (ship.getShipStatus() != Ship.status.SUNK) { + return false; + } + } + return true; + } + + String shotResult(int[] shotCell) { + int line = shotCell[0]; + int column = shotCell[1]; + cellStatus status = getCellStatus(line, column); + + if (status == cellStatus.SHIP) { + cells[line][column] = cellStatus.WOUNDED; + Ship hitShip = getHitShip(shotCell); + if (hitShip != null && hitShip.getShipStatus() == Ship.status.SUNK) { + setSunkStatusToCells(hitShip); + return "sunk"; + } + return "hit"; + } else if (status == cellStatus.MISS || status == cellStatus.WOUNDED || status == cellStatus.SUNK) { + return "repeat"; + } else { + cells[line][column] = cellStatus.MISS; + } + return "miss"; + } + + private cellStatus getCellStatus(int line, int column) { + return cells[line][column]; + } + + private Ship getHitShip(int[] shotCell) { + for (Ship ship : listOfShips) { + if (ship.cellBelongsToShip(shotCell)) { + ship.setShipStatus(Ship.status.HIT); + ship.setCellHit(shotCell); + return ship; + } + } + return null; + } + + private void setSunkStatusToCells(Ship ship) { + int[][] shipCells = ship.getShipCells(); + + for (int[] shipCell : shipCells) { + int line = shipCell[0]; + int column = shipCell[1]; + cells[line][column] = cellStatus.SUNK; + } + } + + void printField(boolean showShips) { + System.out.print(" "); + char c = 0x0041; + + for (int i = 1; i <= fieldLength; i++) { + System.out.print(c + " "); + c += 1; + } + System.out.print("\n"); + + for (int i = 0; i < fieldLength; i++) { + System.out.print(i < 9 ? " " + (i + 1) : " " + (i + 1)); + for (int j = 0; j < fieldLength; j++) { + System.out.print(" "); + if (!showShips && (cells[i][j] == cellStatus.SHIP || cells[i][j] == cellStatus.TOUCHING)) { + System.out.print(cellStatusSign.get(cellStatus.CLEAN)); + } else if (cells[i][j] == cellStatus.SUNK) { + System.out.print(ANSI_RED + cellStatusSign.get(cells[i][j]) + ANSI_RESET); + } else { + System.out.print(cellStatusSign.get(cells[i][j])); + } + } + System.out.println(); + } + System.out.print("\n"); + } + +} + diff --git a/src/main/java/course_project/Player.java b/src/main/java/course_project/Player.java new file mode 100644 index 00000000..61dcb513 --- /dev/null +++ b/src/main/java/course_project/Player.java @@ -0,0 +1,76 @@ +package course_project; + +import lombok.Data; +import java.util.Scanner; +import java.util.TreeMap; +import java.util.regex.Pattern; + +@Data +public class Player { + private static int numberOfUsers; + private String name; + private Field field; + private Scanner scanner; + + public Player(String name, Scanner scanner) { + this.name = name == null || !(Pattern.matches("[a-zA-Z]+", name)) ? "Unknown" + ++numberOfUsers : name; + this.field = new Field(); + this.scanner = scanner; + } + + void fillField(TreeMap numberOfShips) throws InterruptedException { + field.printField(true); + + for (Integer key : numberOfShips.keySet()) { + int numberOfShipType = numberOfShips.get(key); + + for (int i = 0; i < numberOfShipType; i++) { + boolean shipCreated = false; + + while (!shipCreated) { + System.out.println(this.name + ", enter the coordinates of the ship (" + key + " cell(s))."); + System.out.println("Input format must be \"A1 A2\" or \"A1 B1\" for multitube ship and \"A1\" for one-pipe ship.\n"); + String shot = scanner.nextLine(); + String[] shipCoordinates = shot.trim().split("\\s"); + shipCreated = field.createShip(key, shipCoordinates); + + if (!shipCreated) { + field.printField(true); + } else { + field.printField(true); + } + } + } + } + Thread.sleep(4000); + } + + int[] makeShot() { + boolean shotFired = false; + int[] shotCell = new int[]{}; + System.out.println(this.name + ", enter the coordinates of the shot.\n"); + + while (!shotFired) { + shotCell = Field.stringToCell(scanner.nextLine()); + if (shotCell == null) { + System.out.println("Error! You entered the wrong coordinates! Try again.\n"); + } else { + shotFired = true; + } + } + return shotCell; + } + + String checkShot(int[] shotCell) { + return field.shotResult(shotCell); + } + + boolean allShipsSunk() { + return field.allShipsSunk(); + } + + public void printField(boolean showShips) { + field.printField(showShips); + } + +} diff --git a/src/main/java/course_project/SeaBattle.java b/src/main/java/course_project/SeaBattle.java new file mode 100644 index 00000000..e9c0ba56 --- /dev/null +++ b/src/main/java/course_project/SeaBattle.java @@ -0,0 +1,97 @@ +package course_project; + +import lombok.Data; +import java.util.Collections; +import java.util.Scanner; +import java.util.TreeMap; + +@Data +public class SeaBattle { + static final TreeMap numberOfShips = new TreeMap(Collections.reverseOrder()) {{ + /*put(4, 1); + put(3, 2); + put(2, 3); + put(1, 4);*/ + put(3, 1); + put(1, 1); + }}; + private static Scanner scanner = new Scanner(System.in); + private Player player1; + private Player player2; + + public static void main(String[] args) throws InterruptedException { + System.out.println("Player1, enter your name."); + String playerName1 = scanner.nextLine(); + System.out.println("\nPlayer2, enter your name."); + String playerName2 = scanner.nextLine(); + + System.out.println("Thank you. The game is started.\n"); + SeaBattle game = new SeaBattle(playerName1, playerName2); + game.fillFields(); + + System.out.println("Ships are drawn. Let's start shooting.\n"); + Player winner = game.makeShots(); + System.out.println("Congratulations! " + winner.getName() + " is the winner!\n"); + Thread.sleep(4000); + + System.out.println("The field of the winner.\n"); + winner.printField(true); + + scanner.close(); + } + + public SeaBattle(String playerName1, String playerName2) { + this.player1 = new Player(playerName1, scanner); + this.player2 = new Player(playerName2, scanner); + } + + private void fillFields() throws InterruptedException { + player1.fillField(numberOfShips); + clearScreen(); + System.out.println("Next player's turn.\n"); + player2.fillField(numberOfShips); + } + + private Player makeShots() throws InterruptedException { + Player nextPlayer = player1; + Player firedPlayer = player2; + boolean gameOver = false; + + clearScreen(); + while (!gameOver) { + firedPlayer.printField(false); + int[] shotCell = nextPlayer.makeShot(); + String shotResult = firedPlayer.checkShot(shotCell); + + if ("miss".equals(shotResult)) { + System.out.println("You missed. Next player's turn.\n"); + firedPlayer.printField(false); + firedPlayer = nextPlayer; + nextPlayer = nextPlayer == player1 ? player2 : player1; + Thread.sleep(4000); + clearScreen(); + } else if ("repeat".equals(shotResult)) { + System.out.println("Error! You have already shot this cell! Try again.\n"); + } else if ("hit".equals(shotResult)) { + System.out.println("Congratulations! You hit the ship! Try again.\n"); + } else if ("sunk".equals(shotResult)) { + gameOver = firedPlayer.allShipsSunk(); + if (gameOver) { + System.out.println("You sunk all ships!\n"); + firedPlayer.printField(false); + } else { + System.out.println("Congratulations! You sunk the ship! Try again.\n"); + } + } + } + return nextPlayer; + } + + public static void clearScreen() { + for (int i = 0; i < 50; ++i) { + System.out.println(); + } + } + +} + diff --git a/src/main/java/course_project/Ship.java b/src/main/java/course_project/Ship.java new file mode 100644 index 00000000..321dbc71 --- /dev/null +++ b/src/main/java/course_project/Ship.java @@ -0,0 +1,61 @@ +package course_project; + +import lombok.Data; + +@Data +public class Ship { + enum status { + INTACT, + HIT, + SUNK + } + private int shipLength; + private int[][] shipCells; + private status shipStatus; + + public Ship(int shipLength, int[][] shipCells) { + this.shipLength = shipLength; + this.shipCells = shipCells; + this.shipStatus = status.INTACT; + } + + public static boolean shipIsInAStraightLine(int shipLength, int[] beginningCell, int[] endCell) { + return beginningCell[0] == endCell[0] || beginningCell[1] == endCell[1]; + } + + public static boolean rightShipLength(int shipLength, int[] beginningCell, int[] endCell) { + return Math.abs(beginningCell[0] - endCell[0]) + 1 == shipLength || + Math.abs(beginningCell[1] - endCell[1]) + 1 == shipLength; + } + + public boolean cellBelongsToShip(int[] shipCell) { + for (int[] cell : shipCells) { + if (cell[0] == shipCell[0] && cell[1] == shipCell[1]) { + return true; + } + } + return false; + } + + public void setCellHit(int[] shipCell) { + for (int[] cell : shipCells) { + if (cell[0] == shipCell[0] && cell[1] == shipCell[1]) { + cell[2] = 1; + } + } + + if (shipSunk()) { + shipStatus = status.SUNK; + } + } + + private boolean shipSunk() { + for (int[] cell : shipCells) { + if (cell[2] != 1) { + return false; + } + } + return true; + } + +} From 26e2f7dff991c31fe9f0eeee0970b903964979f8 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 20 Sep 2021 01:39:34 +0300 Subject: [PATCH 47/63] course_project --- src/main/java/course_project/SeaBattle.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/course_project/SeaBattle.java b/src/main/java/course_project/SeaBattle.java index e9c0ba56..3bf6b92d 100644 --- a/src/main/java/course_project/SeaBattle.java +++ b/src/main/java/course_project/SeaBattle.java @@ -8,12 +8,10 @@ @Data public class SeaBattle { static final TreeMap numberOfShips = new TreeMap(Collections.reverseOrder()) {{ - /*put(4, 1); + put(4, 1); put(3, 2); put(2, 3); - put(1, 4);*/ - put(3, 1); - put(1, 1); + put(1, 4); }}; private static Scanner scanner = new Scanner(System.in); private Player player1; From b78d768c8746a6e8d0aba25b5875ed61ed36445e Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 20 Sep 2021 12:25:48 +0300 Subject: [PATCH 48/63] course_project --- src/main/java/course_project/SeaBattle.java | 4 +- src/main/java/course_project/Ship.java | 4 ++ .../java/course_project/SeaBattleTest.java | 55 +++++++++++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 src/test/java/course_project/SeaBattleTest.java diff --git a/src/main/java/course_project/SeaBattle.java b/src/main/java/course_project/SeaBattle.java index 3bf6b92d..3aa9556a 100644 --- a/src/main/java/course_project/SeaBattle.java +++ b/src/main/java/course_project/SeaBattle.java @@ -8,9 +8,9 @@ @Data public class SeaBattle { static final TreeMap numberOfShips = new TreeMap(Collections.reverseOrder()) {{ - put(4, 1); + /*put(4, 1); put(3, 2); - put(2, 3); + put(2, 3);*/ put(1, 4); }}; private static Scanner scanner = new Scanner(System.in); diff --git a/src/main/java/course_project/Ship.java b/src/main/java/course_project/Ship.java index 321dbc71..c5742093 100644 --- a/src/main/java/course_project/Ship.java +++ b/src/main/java/course_project/Ship.java @@ -24,6 +24,10 @@ public static boolean shipIsInAStraightLine(int shipLength, int[] beginningCell, } public static boolean rightShipLength(int shipLength, int[] beginningCell, int[] endCell) { + if (shipLength == 1) { + return Math.abs(beginningCell[0] - endCell[0]) + 1 == shipLength && + Math.abs(beginningCell[1] - endCell[1]) + 1 == shipLength; + } return Math.abs(beginningCell[0] - endCell[0]) + 1 == shipLength || Math.abs(beginningCell[1] - endCell[1]) + 1 == shipLength; } diff --git a/src/test/java/course_project/SeaBattleTest.java b/src/test/java/course_project/SeaBattleTest.java new file mode 100644 index 00000000..dbcf2c25 --- /dev/null +++ b/src/test/java/course_project/SeaBattleTest.java @@ -0,0 +1,55 @@ +package course_project; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Collections; +import java.util.TreeMap; + +import static org.junit.jupiter.api.Assertions.*; + +class SeaBattleTest { + SeaBattle game = new SeaBattle("\n", " "); + /*static final TreeMap numberOfShips = new TreeMap() {{ + put(2, 1); + put(1, 1); + }};*/ + + @Test + void setPlayerNamesTest() { + //SeaBattle game = new SeaBattle("\n", " "); + Assertions.assertEquals("Unknown1", game.getPlayer1().getName()); + Assertions.assertEquals("Unknown2", game.getPlayer2().getName()); + } + + @Test + void shipIsInAStraightLineTest() { + Assertions.assertTrue(Ship.shipIsInAStraightLine(4, new int[]{2, 3}, new int[]{5, 3})); + Assertions.assertFalse(Ship.shipIsInAStraightLine(4, new int[]{2, 3}, new int[]{5, 2})); + } + + @Test + void rightShipLengthTest() { + Assertions.assertTrue(Ship.rightShipLength(4, new int[]{2, 3}, new int[]{5, 3})); + Assertions.assertFalse(Ship.rightShipLength(4, new int[]{2, 3}, new int[]{4, 3})); + Assertions.assertTrue(Ship.rightShipLength(1, new int[]{2, 3}, new int[]{2, 3})); + Assertions.assertFalse(Ship.rightShipLength(1, new int[]{2, 3}, new int[]{1, 3})); + } + + @Test + void cellBelongsToShipTest() { + Ship ship = new Ship(4, new int[][] {{1, 2}, {1, 3}, {1, 4}, {1, 5}}); + Assertions.assertTrue(ship.cellBelongsToShip(new int[]{1, 3})); + Assertions.assertFalse(ship.cellBelongsToShip(new int[]{2, 3})); + } + + @Test + void setShipHitAndSunkTest() { + Ship ship = new Ship(2, new int[][] {{1, 2, 0}, {1, 3, 0}}); + assertSame(ship.getShipStatus(), Ship.status.INTACT); + ship.setCellHit(new int[]{1, 2}); + ship.setCellHit(new int[]{1, 3}); + assertSame(ship.getShipStatus(), Ship.status.SUNK); + } + +} \ No newline at end of file From f70eaba02c0da109775a2f3fe79083870044b42e Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 20 Sep 2021 12:35:31 +0300 Subject: [PATCH 49/63] course_project --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index eeebce5a..f4593e69 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,9 @@ | HW4.3. CustomAnnotation | [Custom annotation](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_4/custom_annotation) | custom_annotation | | HW5.1. PowerOfNumber | [Power of number](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/power_of_number) | power_of_number | HW5.2. CustomRegexMatcher | [Custom regex matcher](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/custom_regex_matcher) | custom_regex_matcher -| HW6. MapProblemsGenerator | [Map problems generator](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/map_problems_generator) | map_problems_generator -| HW7. KittenToCatFunction | [Kitten to cat function](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_5/kitten_to_cat_function) | kitten_to_cat_function +| HW6. MapProblemsGenerator | [Map problems generator](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_6/map_problems_generator) | map_problems_generator +| HW7. KittenToCatFunction | [Kitten to cat function](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/homework_7/kitten_to_cat_function) | kitten_to_cat_function +| CourseProject | [Course project](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/main/java/course_project) | course_project | tests | [Test classes](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/RogElena/src/test/java) | Test classes | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) From 4fa976922b965e08327f4ea595e8757543c55432 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 20 Sep 2021 12:42:10 +0300 Subject: [PATCH 50/63] course_project --- src/main/java/course_project/SeaBattle.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/course_project/SeaBattle.java b/src/main/java/course_project/SeaBattle.java index 3aa9556a..3bf6b92d 100644 --- a/src/main/java/course_project/SeaBattle.java +++ b/src/main/java/course_project/SeaBattle.java @@ -8,9 +8,9 @@ @Data public class SeaBattle { static final TreeMap numberOfShips = new TreeMap(Collections.reverseOrder()) {{ - /*put(4, 1); + put(4, 1); put(3, 2); - put(2, 3);*/ + put(2, 3); put(1, 4); }}; private static Scanner scanner = new Scanner(System.in); From 4471afcbd161469b1bc009097127e7b3a44cabe5 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 20 Sep 2021 12:43:17 +0300 Subject: [PATCH 51/63] course_project --- src/test/java/course_project/SeaBattleTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/test/java/course_project/SeaBattleTest.java b/src/test/java/course_project/SeaBattleTest.java index dbcf2c25..6c2d85e5 100644 --- a/src/test/java/course_project/SeaBattleTest.java +++ b/src/test/java/course_project/SeaBattleTest.java @@ -10,10 +10,6 @@ class SeaBattleTest { SeaBattle game = new SeaBattle("\n", " "); - /*static final TreeMap numberOfShips = new TreeMap() {{ - put(2, 1); - put(1, 1); - }};*/ @Test void setPlayerNamesTest() { From e0bf43e882df49af2e6ca8429452dd6a1dcc73e0 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 20 Sep 2021 14:01:20 +0300 Subject: [PATCH 52/63] course_project --- src/main/java/course_project/Field.java | 10 ++-- src/main/java/course_project/Player.java | 2 +- .../java/course_project/SeaBattleTest.java | 52 ++++++++++++++++++- 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/src/main/java/course_project/Field.java b/src/main/java/course_project/Field.java index bbcd7f19..7db37814 100644 --- a/src/main/java/course_project/Field.java +++ b/src/main/java/course_project/Field.java @@ -40,7 +40,7 @@ public static int[] stringToCell(String str) { try { int lineNumber = Integer.parseInt(lineNumberStr); - if (lineNumber > 10) { + if (lineNumber < 1 || lineNumber > 10) { return null; } return new int[]{lineNumber - 1, columnNumber - 1}; @@ -61,8 +61,12 @@ public boolean createShip(int shipLength, String[] shipCoordinates) { int[] beginningCell; int[] endCell; - if ((shipLength == 1 && shipCoordinates.length != 1) - || (shipLength > 1 && shipCoordinates.length != 2)) { + if (shipLength == 1 && (shipCoordinates.length != 1 || shipCoordinates[0] == null)) { + System.out.println("Error! Wrong length of the ship! Try again.\n"); + return false; + } else if (shipLength > 1 && (shipCoordinates.length != 2 + || shipCoordinates[0] == null + || shipCoordinates[1] == null)) { System.out.println("Error! Wrong length of the ship! Try again.\n"); return false; } diff --git a/src/main/java/course_project/Player.java b/src/main/java/course_project/Player.java index 61dcb513..291f94ed 100644 --- a/src/main/java/course_project/Player.java +++ b/src/main/java/course_project/Player.java @@ -7,7 +7,7 @@ @Data public class Player { - private static int numberOfUsers; + public static int numberOfUsers; private String name; private Field field; private Scanner scanner; diff --git a/src/test/java/course_project/SeaBattleTest.java b/src/test/java/course_project/SeaBattleTest.java index 6c2d85e5..03ed8ad0 100644 --- a/src/test/java/course_project/SeaBattleTest.java +++ b/src/test/java/course_project/SeaBattleTest.java @@ -9,23 +9,69 @@ import static org.junit.jupiter.api.Assertions.*; class SeaBattleTest { - SeaBattle game = new SeaBattle("\n", " "); @Test void setPlayerNamesTest() { - //SeaBattle game = new SeaBattle("\n", " "); + Player.numberOfUsers = 0; + SeaBattle game = new SeaBattle("\n", " "); Assertions.assertEquals("Unknown1", game.getPlayer1().getName()); Assertions.assertEquals("Unknown2", game.getPlayer2().getName()); } + @Test + void stringToCellTest() { + Assertions.assertArrayEquals(new int[]{3, 0}, Field.stringToCell("A4")); + Assertions.assertArrayEquals(new int[]{0, 9}, Field.stringToCell("J1")); + Assertions.assertNull(Field.stringToCell("A14")); + Assertions.assertNull(Field.stringToCell("A-4")); + Assertions.assertNull(Field.stringToCell("M4")); + Assertions.assertNull(Field.stringToCell("a4")); + Assertions.assertNull(Field.stringToCell("4")); + } + + @Test + void shipRightCreationTest() { + SeaBattle game = new SeaBattle("Player1", "Player2"); + Assertions.assertTrue(game.getPlayer1().getField().createShip(4, new String[]{"A1", "A4"})); + Assertions.assertTrue(game.getPlayer1().getField().createShip(1, new String[]{"J10"})); + } + + @Test + void shipWrongCreationTest() { + SeaBattle game = new SeaBattle("Player1", "Player2"); + Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{"A1", "A1"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{"A1", "A-2"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{"A1", "A1"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{"A1", "B4"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{"A1", "A3"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{"A1", "A4", "A1"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{"A1", "AA4"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{"A1", null})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{null, "A4"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(1, new String[]{null})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{"A10", "A13"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{"K1", "K4"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(1, new String[]{"J10 J"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(1, new String[]{"J11"})); + } + + @Test + void shipWrongCreationTest2() { + SeaBattle game = new SeaBattle("Player1", "Player2"); + Assertions.assertTrue(game.getPlayer1().getField().createShip(4, new String[]{"A1", "A4"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{"A1", "D1"})); + } + @Test void shipIsInAStraightLineTest() { + SeaBattle game = new SeaBattle("Player1", "Player2"); Assertions.assertTrue(Ship.shipIsInAStraightLine(4, new int[]{2, 3}, new int[]{5, 3})); Assertions.assertFalse(Ship.shipIsInAStraightLine(4, new int[]{2, 3}, new int[]{5, 2})); } @Test void rightShipLengthTest() { + SeaBattle game = new SeaBattle("Player1", "Player2"); Assertions.assertTrue(Ship.rightShipLength(4, new int[]{2, 3}, new int[]{5, 3})); Assertions.assertFalse(Ship.rightShipLength(4, new int[]{2, 3}, new int[]{4, 3})); Assertions.assertTrue(Ship.rightShipLength(1, new int[]{2, 3}, new int[]{2, 3})); @@ -34,6 +80,7 @@ void rightShipLengthTest() { @Test void cellBelongsToShipTest() { + SeaBattle game = new SeaBattle("Player1", "Player2"); Ship ship = new Ship(4, new int[][] {{1, 2}, {1, 3}, {1, 4}, {1, 5}}); Assertions.assertTrue(ship.cellBelongsToShip(new int[]{1, 3})); Assertions.assertFalse(ship.cellBelongsToShip(new int[]{2, 3})); @@ -41,6 +88,7 @@ void cellBelongsToShipTest() { @Test void setShipHitAndSunkTest() { + SeaBattle game = new SeaBattle("Player1", "Player2"); Ship ship = new Ship(2, new int[][] {{1, 2, 0}, {1, 3, 0}}); assertSame(ship.getShipStatus(), Ship.status.INTACT); ship.setCellHit(new int[]{1, 2}); From 13797bd2e99e87406123dde067c4ba66e9ad8658 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 20 Sep 2021 14:55:13 +0300 Subject: [PATCH 53/63] course_project --- .../java/course_project/SeaBattleTest.java | 41 ++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/src/test/java/course_project/SeaBattleTest.java b/src/test/java/course_project/SeaBattleTest.java index 03ed8ad0..54d8d604 100644 --- a/src/test/java/course_project/SeaBattleTest.java +++ b/src/test/java/course_project/SeaBattleTest.java @@ -3,6 +3,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.ArrayList; import java.util.Collections; import java.util.TreeMap; @@ -56,10 +57,12 @@ void shipWrongCreationTest() { } @Test - void shipWrongCreationTest2() { + void shipTouchingCreationTest() { SeaBattle game = new SeaBattle("Player1", "Player2"); Assertions.assertTrue(game.getPlayer1().getField().createShip(4, new String[]{"A1", "A4"})); Assertions.assertFalse(game.getPlayer1().getField().createShip(4, new String[]{"A1", "D1"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(1, new String[]{"A2"})); + Assertions.assertFalse(game.getPlayer1().getField().createShip(1, new String[]{"B2"})); } @Test @@ -87,8 +90,42 @@ void cellBelongsToShipTest() { } @Test - void setShipHitAndSunkTest() { + void allShipsSunkTest() { SeaBattle game = new SeaBattle("Player1", "Player2"); + Field field = game.getPlayer1().getField(); + field.createShip(4, new String[]{"A1", "A4"}); + field.createShip(1, new String[]{"J8"}); + + Assertions.assertFalse(game.getPlayer1().allShipsSunk()); + for (Ship ship : game.getPlayer1().getField().getListOfShips()) { + ship.setShipStatus(Ship.status.SUNK); + } + Assertions.assertTrue(game.getPlayer1().allShipsSunk()); + } + + @Test + void shotResultTest() { + SeaBattle game = new SeaBattle("Player1", "Player2"); + Field field = game.getPlayer1().getField(); + field.createShip(3, new String[]{"A1", "A3"}); + field.createShip(1, new String[]{"J8"}); + + Assertions.assertEquals("miss", field.shotResult(new int[]{9, 7})); + Assertions.assertEquals("repeat", field.shotResult(new int[]{9, 7})); + Assertions.assertEquals("hit", field.shotResult(new int[]{0, 0})); + Assertions.assertEquals("hit", field.shotResult(new int[]{1, 0})); + Assertions.assertEquals("sunk", field.shotResult(new int[]{2, 0})); + Assertions.assertEquals("repeat", field.shotResult(new int[]{2, 0})); + Assertions.assertEquals("sunk", field.shotResult(new int[]{7, 9})); + } + + /* + + + */ + + @Test + void setShipHitAndSunkTest() { Ship ship = new Ship(2, new int[][] {{1, 2, 0}, {1, 3, 0}}); assertSame(ship.getShipStatus(), Ship.status.INTACT); ship.setCellHit(new int[]{1, 2}); From 4ea5f9b1358c18b9d39de421b36da2f3a2dc804d Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Mon, 20 Sep 2021 15:13:42 +0300 Subject: [PATCH 54/63] course_project --- .../java/course_project/SeaBattleTest.java | 39 +++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/src/test/java/course_project/SeaBattleTest.java b/src/test/java/course_project/SeaBattleTest.java index 54d8d604..a6802172 100644 --- a/src/test/java/course_project/SeaBattleTest.java +++ b/src/test/java/course_project/SeaBattleTest.java @@ -23,6 +23,10 @@ void setPlayerNamesTest() { void stringToCellTest() { Assertions.assertArrayEquals(new int[]{3, 0}, Field.stringToCell("A4")); Assertions.assertArrayEquals(new int[]{0, 9}, Field.stringToCell("J1")); + } + + @Test + void wrongCaseStringToCellTest() { Assertions.assertNull(Field.stringToCell("A14")); Assertions.assertNull(Field.stringToCell("A-4")); Assertions.assertNull(Field.stringToCell("M4")); @@ -34,6 +38,7 @@ void stringToCellTest() { void shipRightCreationTest() { SeaBattle game = new SeaBattle("Player1", "Player2"); Assertions.assertTrue(game.getPlayer1().getField().createShip(4, new String[]{"A1", "A4"})); + Assertions.assertTrue(game.getPlayer1().getField().createShip(3, new String[]{"I7", "I5"})); Assertions.assertTrue(game.getPlayer1().getField().createShip(1, new String[]{"J10"})); } @@ -108,7 +113,6 @@ void shotResultTest() { SeaBattle game = new SeaBattle("Player1", "Player2"); Field field = game.getPlayer1().getField(); field.createShip(3, new String[]{"A1", "A3"}); - field.createShip(1, new String[]{"J8"}); Assertions.assertEquals("miss", field.shotResult(new int[]{9, 7})); Assertions.assertEquals("repeat", field.shotResult(new int[]{9, 7})); @@ -116,13 +120,42 @@ void shotResultTest() { Assertions.assertEquals("hit", field.shotResult(new int[]{1, 0})); Assertions.assertEquals("sunk", field.shotResult(new int[]{2, 0})); Assertions.assertEquals("repeat", field.shotResult(new int[]{2, 0})); + } + + @Test + void shotResultTest2() { + SeaBattle game = new SeaBattle("Player1", "Player2"); + Field field = game.getPlayer1().getField(); + field.createShip(1, new String[]{"J8"}); + Assertions.assertEquals("sunk", field.shotResult(new int[]{7, 9})); } - /* + @Test + void shipStatusTest() { + SeaBattle game = new SeaBattle("Player1", "Player2"); + Field field = game.getPlayer1().getField(); + field.createShip(3, new String[]{"A1", "A3"}); + Assertions.assertSame(field.getListOfShips().get(0).getShipStatus(), Ship.status.INTACT); + field.shotResult(new int[]{0, 0}); + Assertions.assertSame(field.getListOfShips().get(0).getShipStatus(), Ship.status.HIT); + field.shotResult(new int[]{1, 0}); + Assertions.assertSame(field.getListOfShips().get(0).getShipStatus(), Ship.status.HIT); + field.shotResult(new int[]{2, 0}); + Assertions.assertSame(field.getListOfShips().get(0).getShipStatus(), Ship.status.SUNK); + } - */ + @Test + void shipStatusTest2() { + SeaBattle game = new SeaBattle("Player1", "Player2"); + Field field = game.getPlayer1().getField(); + field.createShip(1, new String[]{"J8"}); + + Assertions.assertSame(field.getListOfShips().get(0).getShipStatus(), Ship.status.INTACT); + field.shotResult(new int[]{7, 9}); + Assertions.assertSame(field.getListOfShips().get(0).getShipStatus(), Ship.status.SUNK); + } @Test void setShipHitAndSunkTest() { From e4b470074c4e5a216305866b0c06ff5c066dd9b4 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 22 Sep 2021 18:34:47 +0300 Subject: [PATCH 55/63] CollisionClass --- .../java/homework_6/map_problems_generator/CollisionClass.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/homework_6/map_problems_generator/CollisionClass.java b/src/main/java/homework_6/map_problems_generator/CollisionClass.java index 08cfa661..dfcd7aec 100644 --- a/src/main/java/homework_6/map_problems_generator/CollisionClass.java +++ b/src/main/java/homework_6/map_problems_generator/CollisionClass.java @@ -13,7 +13,7 @@ public class CollisionClass { @Override public int hashCode() { - return dateOfBirth.get(Calendar.YEAR); + return 1; } @Override From 80f0e76c6ebc932e247479c70bb8788c209d64a9 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Wed, 22 Sep 2021 19:13:59 +0300 Subject: [PATCH 56/63] SingletonTest --- src/test/java/homework_4/singleton/SingletonTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/homework_4/singleton/SingletonTest.java b/src/test/java/homework_4/singleton/SingletonTest.java index 6a462ebe..06f2bb20 100644 --- a/src/test/java/homework_4/singleton/SingletonTest.java +++ b/src/test/java/homework_4/singleton/SingletonTest.java @@ -12,7 +12,7 @@ void testSingleton() { Assertions.assertEquals(singleGameHero.getName(), singleGameHero2.getName()); Assertions.assertEquals(singleGameHero.getAge(), singleGameHero2.getAge()); - Assertions.assertEquals(singleGameHero.hashCode(), singleGameHero2.hashCode()); + Assertions.assertSame(singleGameHero, singleGameHero2); } @Test @@ -27,6 +27,6 @@ void testWithChangingSingleton() { Assertions.assertEquals(singleGameHero.getName(), singleGameHero2.getName()); Assertions.assertEquals(singleGameHero.getAge(), singleGameHero2.getAge()); - Assertions.assertEquals(singleGameHero.hashCode(), singleGameHero2.hashCode()); + Assertions.assertSame(singleGameHero, singleGameHero2); } } \ No newline at end of file From 391f6849e90aa2c29be5fa909f6f6948796bbd7d Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Thu, 23 Sep 2021 12:25:41 +0300 Subject: [PATCH 57/63] MutableClass --- .../java/homework_4/custom_file_reader/CustomFileReader.java | 2 +- .../map_problems_generator/MapProblemsGenerator.java | 3 +++ .../java/homework_6/map_problems_generator/MutableClass.java | 3 +-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/homework_4/custom_file_reader/CustomFileReader.java b/src/main/java/homework_4/custom_file_reader/CustomFileReader.java index bdd98c42..bc6c32a2 100644 --- a/src/main/java/homework_4/custom_file_reader/CustomFileReader.java +++ b/src/main/java/homework_4/custom_file_reader/CustomFileReader.java @@ -124,7 +124,7 @@ public String replaceDotsCommas(String str) { return str2.replaceAll(",", ""); } - public void print(String str) { + private void print(String str) { System.out.println(str); } } diff --git a/src/main/java/homework_6/map_problems_generator/MapProblemsGenerator.java b/src/main/java/homework_6/map_problems_generator/MapProblemsGenerator.java index c09d73b6..a45d6c08 100644 --- a/src/main/java/homework_6/map_problems_generator/MapProblemsGenerator.java +++ b/src/main/java/homework_6/map_problems_generator/MapProblemsGenerator.java @@ -26,6 +26,9 @@ public void run() { mutableMap.put(daniilHarmsDateOfBirth, "Daniil Harms"); mutableMap.forEach((key, value) -> System.out.println("hashcode " + key.hashCode() + ": " + key.toString() + ", " + value)); + aynRandDateOfBirth.setDateOfBirth(new GregorianCalendar(1905, 1,3)); + gretaGarboDateOfBirth.setDateOfBirth(new GregorianCalendar(1905, 8,19)); + daniilHarmsDateOfBirth.setDateOfBirth(new GregorianCalendar(1905, 11,29)); System.out.println("Each time new hashcode of the same element -> each time new bucket for element searching:"); System.out.println("Ayn Rand searching: " + mutableMap.get(aynRandDateOfBirth)); System.out.println("Greta Garbo searching: " + mutableMap.get(gretaGarboDateOfBirth)); diff --git a/src/main/java/homework_6/map_problems_generator/MutableClass.java b/src/main/java/homework_6/map_problems_generator/MutableClass.java index b97b7473..cda068dc 100644 --- a/src/main/java/homework_6/map_problems_generator/MutableClass.java +++ b/src/main/java/homework_6/map_problems_generator/MutableClass.java @@ -15,8 +15,7 @@ public class MutableClass { @Override public int hashCode() { - Random random = new Random(); - return random.nextInt(); + return dateOfBirth == null ? 0 : dateOfBirth.hashCode(); } @Override From 312d1a06d850d4bd51fed3500178f1cdb25c1c8b Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Thu, 23 Sep 2021 14:51:18 +0300 Subject: [PATCH 58/63] SeaBattle --- src/main/java/course_project/Field.java | 8 +++++ src/main/java/course_project/SeaBattle.java | 31 +++++++++++++++-- .../course_project/SeaBattleTestService.java | 33 +++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 src/main/java/course_project/SeaBattleTestService.java diff --git a/src/main/java/course_project/Field.java b/src/main/java/course_project/Field.java index 7db37814..97b7491d 100644 --- a/src/main/java/course_project/Field.java +++ b/src/main/java/course_project/Field.java @@ -1,6 +1,8 @@ package course_project; import lombok.Data; +import lombok.Value; + import java.util.*; @Data @@ -182,6 +184,12 @@ private ArrayList getAdjacentCells(int[] cell) { return adjacentCells; } + public void drawTestShips(int[][][] data) { + for (int[][] arr : data) { + drawShip(arr[0][0], arr[1], arr[2]); + } + } + private void drawShip(int shipLength, int[] beginningCell, int[] endCell) { int[][] shipCells = getShipCells(beginningCell, endCell); listOfShips.add(new Ship(shipLength, shipCells)); diff --git a/src/main/java/course_project/SeaBattle.java b/src/main/java/course_project/SeaBattle.java index 3bf6b92d..71945b8e 100644 --- a/src/main/java/course_project/SeaBattle.java +++ b/src/main/java/course_project/SeaBattle.java @@ -2,6 +2,7 @@ import lombok.Data; import java.util.Collections; +import java.util.Locale; import java.util.Scanner; import java.util.TreeMap; @@ -16,6 +17,7 @@ public class SeaBattle { private static Scanner scanner = new Scanner(System.in); private Player player1; private Player player2; + private SeaBattleTestService service = null; public static void main(String[] args) throws InterruptedException { System.out.println("Player1, enter your name."); @@ -23,9 +25,34 @@ public static void main(String[] args) throws InterruptedException { System.out.println("\nPlayer2, enter your name."); String playerName2 = scanner.nextLine(); - System.out.println("Thank you. The game is started.\n"); + System.out.println("Do you want an auto-alignment of ships? (Y/N)\n"); + String replay = scanner.nextLine().toLowerCase(); + if (!"y".equals(replay) && !"n".equals((replay))) { + System.out.println("The game is canselled. Goodbye!\n"); + scanner.close(); + return; + } + SeaBattle game = new SeaBattle(playerName1, playerName2); - game.fillFields(); + if ("n".equals(replay)) { + System.out.println("Thank you. The game is started.\n"); + game.fillFields(); + + } else if ("y".equals(replay)) { + System.out.println("Thank you. The game is started only for testing (no random placement).\n"); + Thread.sleep(4000); + game.service = new SeaBattleTestService(game.getPlayer1(), game.getPlayer2()); + + System.out.println(game.getPlayer1().getName() + ", here is your field.\n"); + game.getPlayer1().printField(true); + Thread.sleep(4000); + clearScreen(); + + System.out.println(game.getPlayer2().getName() + ", here is your field.\n"); + game.getPlayer2().printField(true); + Thread.sleep(4000); + clearScreen(); + } System.out.println("Ships are drawn. Let's start shooting.\n"); Player winner = game.makeShots(); diff --git a/src/main/java/course_project/SeaBattleTestService.java b/src/main/java/course_project/SeaBattleTestService.java new file mode 100644 index 00000000..c9e2ae28 --- /dev/null +++ b/src/main/java/course_project/SeaBattleTestService.java @@ -0,0 +1,33 @@ +package course_project; + +import lombok.Data; + +@Data +public class SeaBattleTestService { + public SeaBattleTestService(Player player1, Player player2) { + fillFields(player1, 0); + fillFields(player2, 1); + } + + private void fillFields(Player player, int coordinateShift) { + Field field = player.getField(); + field.drawTestShips(getMatrix(coordinateShift)); + } + + private int[][][] getMatrix(int cs) { + int[][][] matrix = { + {{4, 0}, {2 + cs, 0 + cs}, {2 + cs, 3 + cs}}, + {{3, 0}, {0 + cs, 2 + cs}, {0 + cs, 4 + cs}}, + {{3, 0}, {6 + cs, 8 + cs}, {8 + cs, 8 + cs}}, + {{2, 0}, {5 + cs, 2 + cs}, {5 + cs, 3 + cs}}, + {{2, 0}, {5 + cs, 5 + cs}, {5 + cs, 6 + cs}}, + {{2, 0}, {7 + cs, 1 + cs}, {8 + cs, 1 + cs}}, + {{1, 0}, {0 + cs, 0 + cs}, {0 + cs, 0 + cs}}, + {{1, 0}, {1 + cs, 8 + cs}, {1 + cs, 8 + cs}}, + {{1, 0}, {3 + cs, 6 + cs}, {3 + cs, 6 + cs}}, + {{1, 0}, {7 + cs, 4 + cs}, {7 + cs, 4 + cs}} + }; + return matrix; + } + +} From cad8cde747ecd5f4221537cd7861e83a2d205f88 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Thu, 23 Sep 2021 15:05:25 +0300 Subject: [PATCH 59/63] SeaBattle --- src/main/java/course_project/Player.java | 7 ++++++- src/main/java/course_project/SeaBattle.java | 3 +-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/course_project/Player.java b/src/main/java/course_project/Player.java index 291f94ed..9acbf525 100644 --- a/src/main/java/course_project/Player.java +++ b/src/main/java/course_project/Player.java @@ -46,12 +46,17 @@ void fillField(TreeMap numberOfShips) throws InterruptedExcept } int[] makeShot() { + String shot = null; boolean shotFired = false; int[] shotCell = new int[]{}; System.out.println(this.name + ", enter the coordinates of the shot.\n"); while (!shotFired) { - shotCell = Field.stringToCell(scanner.nextLine()); + shot = scanner.nextLine(); + if (shot == null) { + continue; + } + shotCell = Field.stringToCell(shot); if (shotCell == null) { System.out.println("Error! You entered the wrong coordinates! Try again.\n"); } else { diff --git a/src/main/java/course_project/SeaBattle.java b/src/main/java/course_project/SeaBattle.java index 71945b8e..488ba975 100644 --- a/src/main/java/course_project/SeaBattle.java +++ b/src/main/java/course_project/SeaBattle.java @@ -2,7 +2,6 @@ import lombok.Data; import java.util.Collections; -import java.util.Locale; import java.util.Scanner; import java.util.TreeMap; @@ -39,7 +38,7 @@ public static void main(String[] args) throws InterruptedException { game.fillFields(); } else if ("y".equals(replay)) { - System.out.println("Thank you. The game is started only for testing (no random placement).\n"); + System.out.println("\nThank you. The game is started only for testing (no random placement).\n"); Thread.sleep(4000); game.service = new SeaBattleTestService(game.getPlayer1(), game.getPlayer2()); From 4665d44e1faf8ffa45d6dd9799f56445dedb7543 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Thu, 23 Sep 2021 15:10:49 +0300 Subject: [PATCH 60/63] SeaBattle --- src/main/java/course_project/Player.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/course_project/Player.java b/src/main/java/course_project/Player.java index 9acbf525..7b6adec5 100644 --- a/src/main/java/course_project/Player.java +++ b/src/main/java/course_project/Player.java @@ -46,14 +46,15 @@ void fillField(TreeMap numberOfShips) throws InterruptedExcept } int[] makeShot() { - String shot = null; + String shot = ""; boolean shotFired = false; int[] shotCell = new int[]{}; System.out.println(this.name + ", enter the coordinates of the shot.\n"); while (!shotFired) { shot = scanner.nextLine(); - if (shot == null) { + if (shot == null || "".equals(shot)) { + System.out.println("Error! You entered the wrong coordinates! Try again.\n"); continue; } shotCell = Field.stringToCell(shot); From ead5e91e55833720076f96ac2f5a987938a24687 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Thu, 23 Sep 2021 16:17:13 +0300 Subject: [PATCH 61/63] ImmutableClass --- src/main/java/homework_3/library/Author.java | 7 ++++++- src/main/java/homework_3/library/LibraryCard.java | 11 ++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/homework_3/library/Author.java b/src/main/java/homework_3/library/Author.java index d67d2159..2d9d4890 100644 --- a/src/main/java/homework_3/library/Author.java +++ b/src/main/java/homework_3/library/Author.java @@ -3,7 +3,7 @@ import lombok.Data; @Data -public class Author { +public class Author implements Cloneable { private String name; private String country; private String century; @@ -24,6 +24,11 @@ public Author(String name, String country, String century) { this.century = century; } + @Override + protected Author clone() { + return new Author(this.name, this.country, this.century); + } + @Override public String toString() { return name; diff --git a/src/main/java/homework_3/library/LibraryCard.java b/src/main/java/homework_3/library/LibraryCard.java index 3a9db44a..0838699f 100644 --- a/src/main/java/homework_3/library/LibraryCard.java +++ b/src/main/java/homework_3/library/LibraryCard.java @@ -27,7 +27,8 @@ private enum Section { private final Calendar yearOfPublishing; private final int numberOfPages; - public static LibraryCard initializeNewLibraryCard (Author author, String title, GregorianCalendar yearOfPublishing, int numberOfPages, String sectionStr) + public static LibraryCard initializeNewLibraryCard (Author author, String title, + GregorianCalendar yearOfPublishing, int numberOfPages, String sectionStr) throws IllegalArgumentException { if (author == null || title == null @@ -89,18 +90,18 @@ public LibraryCard setAuthor(Author author) { } public LibraryCard setTitle(String title) { - return new LibraryCard(this.author, title, this.yearOfPublishing, this.numberOfPages, this.section); + return new LibraryCard(this.author.clone(), title, this.yearOfPublishing, this.numberOfPages, this.section); } public LibraryCard setYearOfPublishing(GregorianCalendar yearOfPublishing) { - return new LibraryCard(this.author, this.title, yearOfPublishing, this.numberOfPages, this.section); + return new LibraryCard(this.author.clone(), this.title, yearOfPublishing, this.numberOfPages, this.section); } public LibraryCard setNumberOfPages(int numberOfPages) { - return new LibraryCard(this.author, this.title, this.yearOfPublishing, numberOfPages, this.section); + return new LibraryCard(this.author.clone(), this.title, this.yearOfPublishing, numberOfPages, this.section); } public LibraryCard setSection(Section section) { - return new LibraryCard(this.author, this.title, this.yearOfPublishing, this.numberOfPages, section); + return new LibraryCard(this.author.clone(), this.title, this.yearOfPublishing, this.numberOfPages, section); } } From 5c7fcf1eecb5405ba61bb21d1e6d0a6ffff80eac Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Thu, 23 Sep 2021 21:50:10 +0300 Subject: [PATCH 62/63] ImmutableClass --- src/main/java/homework_3/library/LibraryCard.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/homework_3/library/LibraryCard.java b/src/main/java/homework_3/library/LibraryCard.java index 0838699f..f275195d 100644 --- a/src/main/java/homework_3/library/LibraryCard.java +++ b/src/main/java/homework_3/library/LibraryCard.java @@ -86,22 +86,22 @@ public String toString() { } public LibraryCard setAuthor(Author author) { - return new LibraryCard(author, this.title, this.yearOfPublishing, this.numberOfPages, this.section); + return new LibraryCard(author, this.title, (Calendar) this.yearOfPublishing.clone(), this.numberOfPages, this.section); } public LibraryCard setTitle(String title) { - return new LibraryCard(this.author.clone(), title, this.yearOfPublishing, this.numberOfPages, this.section); + return new LibraryCard(this.author.clone(), title, (Calendar) this.yearOfPublishing.clone(), this.numberOfPages, this.section); } public LibraryCard setYearOfPublishing(GregorianCalendar yearOfPublishing) { - return new LibraryCard(this.author.clone(), this.title, yearOfPublishing, this.numberOfPages, this.section); + return new LibraryCard(this.author.clone(), this.title, this.yearOfPublishing, this.numberOfPages, this.section); } public LibraryCard setNumberOfPages(int numberOfPages) { - return new LibraryCard(this.author.clone(), this.title, this.yearOfPublishing, numberOfPages, this.section); + return new LibraryCard(this.author.clone(), this.title, (Calendar) this.yearOfPublishing.clone(), numberOfPages, this.section); } public LibraryCard setSection(Section section) { - return new LibraryCard(this.author.clone(), this.title, this.yearOfPublishing, this.numberOfPages, section); + return new LibraryCard(this.author.clone(), this.title, (Calendar) this.yearOfPublishing.clone(), this.numberOfPages, section); } } From 1aa4774a4710340b5b333c7a9e494be2795cff60 Mon Sep 17 00:00:00 2001 From: Elena Rog Date: Fri, 24 Sep 2021 14:26:52 +0300 Subject: [PATCH 63/63] ImmutableClass --- .../java/homework_3/library/LibraryCard.java | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/src/main/java/homework_3/library/LibraryCard.java b/src/main/java/homework_3/library/LibraryCard.java index f275195d..cb9be924 100644 --- a/src/main/java/homework_3/library/LibraryCard.java +++ b/src/main/java/homework_3/library/LibraryCard.java @@ -85,23 +85,12 @@ public String toString() { + getSection() + ")"; } - public LibraryCard setAuthor(Author author) { - return new LibraryCard(author, this.title, (Calendar) this.yearOfPublishing.clone(), this.numberOfPages, this.section); + public Author getAuthor() { + return author.clone(); } - public LibraryCard setTitle(String title) { - return new LibraryCard(this.author.clone(), title, (Calendar) this.yearOfPublishing.clone(), this.numberOfPages, this.section); + public Calendar getYearOfPublishing() { + return (Calendar) yearOfPublishing.clone(); } - public LibraryCard setYearOfPublishing(GregorianCalendar yearOfPublishing) { - return new LibraryCard(this.author.clone(), this.title, this.yearOfPublishing, this.numberOfPages, this.section); - } - - public LibraryCard setNumberOfPages(int numberOfPages) { - return new LibraryCard(this.author.clone(), this.title, (Calendar) this.yearOfPublishing.clone(), numberOfPages, this.section); - } - - public LibraryCard setSection(Section section) { - return new LibraryCard(this.author.clone(), this.title, (Calendar) this.yearOfPublishing.clone(), this.numberOfPages, section); - } }