From ed900311d6fe229a50226ae2b3315fcccbec98ac Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Wed, 7 Jul 2021 20:16:18 +0300 Subject: [PATCH 01/20] Homework 1 is done --- src/main/java/homework_1/Main.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/homework_1/Main.java b/src/main/java/homework_1/Main.java index 07c029a2..911c9d57 100644 --- a/src/main/java/homework_1/Main.java +++ b/src/main/java/homework_1/Main.java @@ -3,7 +3,17 @@ public class Main { public static void main(String[] args) { - System.out.println("Hello homework!"); + + for (String arg : args) { + if (arg.equals("error")) { + System.out.println("\u001B[41m" + "Alarm!" + "\u001B[0m"); + break; + } + if (arg.length() != 8) { + continue; + } + System.out.println(arg); + } } } From ffc5bc7878caaa674bcb7752eb5a775d59bde38d Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Thu, 8 Jul 2021 21:25:26 +0300 Subject: [PATCH 02/20] Homework 1 is done. Rework print to console. --- 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 911c9d57..5c049954 100644 --- a/src/main/java/homework_1/Main.java +++ b/src/main/java/homework_1/Main.java @@ -12,7 +12,7 @@ public static void main(String[] args) { if (arg.length() != 8) { continue; } - System.out.println(arg); + System.out.println(arg + ": " + arg.length()); } } From 5fc4b6623eb45d3292aeb7e05df89cfba4653571 Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Thu, 8 Jul 2021 21:31:58 +0300 Subject: [PATCH 03/20] Made README.md correct style. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5d686e9f..ee527ea5 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,6 @@ | 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 | [Solution_1](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/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 f48b06eb92b03901a5a4a1780b9b4e0273aaa749 Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Sun, 11 Jul 2021 12:39:25 +0300 Subject: [PATCH 04/20] Deleted if condition --- src/main/java/homework_1/Main.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/homework_1/Main.java b/src/main/java/homework_1/Main.java index 5c049954..d58ee5ed 100644 --- a/src/main/java/homework_1/Main.java +++ b/src/main/java/homework_1/Main.java @@ -9,10 +9,7 @@ public static void main(String[] args) { System.out.println("\u001B[41m" + "Alarm!" + "\u001B[0m"); break; } - if (arg.length() != 8) { - continue; - } - System.out.println(arg + ": " + arg.length()); + System.out.println(arg + ": " + arg.length() + "letters"); } } From 9d17d8436145ef79bd8baafd37d8a4e77b69f08c Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Tue, 13 Jul 2021 20:19:51 +0300 Subject: [PATCH 05/20] Fixed style --- src/main/java/homework_1/Main.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/homework_1/Main.java b/src/main/java/homework_1/Main.java index d58ee5ed..a44f167b 100644 --- a/src/main/java/homework_1/Main.java +++ b/src/main/java/homework_1/Main.java @@ -3,14 +3,13 @@ public class Main { public static void main(String[] args) { - for (String arg : args) { if (arg.equals("error")) { System.out.println("\u001B[41m" + "Alarm!" + "\u001B[0m"); break; } - System.out.println(arg + ": " + arg.length() + "letters"); + + System.out.println(arg + " : " + arg.length() + " letters"); } } - } From d8ea7632a27250b5c68ab4dd9b25955289e832c0 Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Tue, 20 Jul 2021 01:16:26 +0300 Subject: [PATCH 06/20] Completed the homework3 --- .../java/homework_2/pyramidprinter/Main.java | 9 ++++ .../pyramidprinter/PyramidPrinter.java | 28 +++++++++++ .../homework_2/randomcharstable/Main.java | 10 ++++ .../randomcharstable/RandomCharsTable.java | 49 +++++++++++++++++++ .../java/homework_2/trafficlight/Main.java | 9 ++++ .../homework_2/trafficlight/TrafficLight.java | 38 ++++++++++++++ 6 files changed, 143 insertions(+) create mode 100644 src/main/java/homework_2/pyramidprinter/Main.java create mode 100644 src/main/java/homework_2/pyramidprinter/PyramidPrinter.java create mode 100644 src/main/java/homework_2/randomcharstable/Main.java create mode 100644 src/main/java/homework_2/randomcharstable/RandomCharsTable.java create mode 100644 src/main/java/homework_2/trafficlight/Main.java create mode 100644 src/main/java/homework_2/trafficlight/TrafficLight.java diff --git a/src/main/java/homework_2/pyramidprinter/Main.java b/src/main/java/homework_2/pyramidprinter/Main.java new file mode 100644 index 00000000..205d3d5c --- /dev/null +++ b/src/main/java/homework_2/pyramidprinter/Main.java @@ -0,0 +1,9 @@ +package homework_2.pyramidprinter; + +public class Main { + + public static void main(String[] args) { + PyramidPrinter pyramidPrinter = new PyramidPrinter(); + pyramidPrinter.start(args[0]); + } +} diff --git a/src/main/java/homework_2/pyramidprinter/PyramidPrinter.java b/src/main/java/homework_2/pyramidprinter/PyramidPrinter.java new file mode 100644 index 00000000..67111d0f --- /dev/null +++ b/src/main/java/homework_2/pyramidprinter/PyramidPrinter.java @@ -0,0 +1,28 @@ +package homework_2.pyramidprinter; + +import java.util.regex.Pattern; + +public class PyramidPrinter { + + public void start(String sizeAsString) { + if (!isNumber(sizeAsString)) { + System.out.println("ERROR! This is not a number"); + return; + } + int size = Integer.parseInt(sizeAsString); + if (size < 0) { + System.out.println("ERROR! Size is negative"); + return; + } + for (int i = 0; i < size; i++) { + for (int j = 0; j <= i; j++) { + System.out.print("*"); + } + System.out.println(); + } + } + + private boolean isNumber(String str) { + return !Pattern.matches(str, "-?[0-9]+"); + } +} diff --git a/src/main/java/homework_2/randomcharstable/Main.java b/src/main/java/homework_2/randomcharstable/Main.java new file mode 100644 index 00000000..5655738a --- /dev/null +++ b/src/main/java/homework_2/randomcharstable/Main.java @@ -0,0 +1,10 @@ +package homework_2.randomcharstable; + +public class Main { + + public static void main(String[] args) { + RandomCharsTable randomCharsTable = new RandomCharsTable(); + String[] strings = {"5", "2", "even"}; + randomCharsTable.start(strings); + } +} diff --git a/src/main/java/homework_2/randomcharstable/RandomCharsTable.java b/src/main/java/homework_2/randomcharstable/RandomCharsTable.java new file mode 100644 index 00000000..9fa93dbf --- /dev/null +++ b/src/main/java/homework_2/randomcharstable/RandomCharsTable.java @@ -0,0 +1,49 @@ +package homework_2.randomcharstable; + +import java.util.Random; +import java.util.regex.Pattern; + +public class RandomCharsTable { + public void start(String[] params) { + if (!isNumber(params[0]) || !isNumber(params[1])) { + System.out.println("ERROR! This is not a number"); + return; + } + int rows = Integer.parseInt(params[0]); + int columns = Integer.parseInt(params[1]); + if (rows == 0 || columns == 0) { + return; + } + if (rows < 0 || columns < 0) { + System.out.println("ERROR! One of the numbers is negative"); + return; + } + String strategy = params[2]; + int strategyMod; + if (strategy.equals("even")) { + strategyMod = 0; + } else if (strategy.equals("odd")){ + strategyMod = 1; + } else { + System.out.println("ERROR! Unknown strategy"); + return; + } + StringBuilder result = new StringBuilder(strategy + " letters - "); + for (int i = 0; i < rows; i++) { + System.out.print("| "); + for (int j = 0; j < columns; j++) { + char letter = (char) (65 + new Random().nextInt(26)); + System.out.print(letter + " | "); + if (letter % 2 == strategyMod) { + result.append(letter).append(", "); + } + } + System.out.println(); + } + System.out.println(result.deleteCharAt(result.length() - 2)); + } + + private boolean isNumber(String str) { + return !Pattern.matches(str, "-?[0-9]+"); + } +} 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..306f9cd1 --- /dev/null +++ b/src/main/java/homework_2/trafficlight/Main.java @@ -0,0 +1,9 @@ +package homework_2.trafficlight; + +public class Main { + + public static void main(String[] args) { + TrafficLight trafficLight = new TrafficLight(); + trafficLight.start(args[0]); + } +} diff --git a/src/main/java/homework_2/trafficlight/TrafficLight.java b/src/main/java/homework_2/trafficlight/TrafficLight.java new file mode 100644 index 00000000..e8b7aa63 --- /dev/null +++ b/src/main/java/homework_2/trafficlight/TrafficLight.java @@ -0,0 +1,38 @@ +package homework_2.trafficlight; + +import java.time.Instant; +import java.util.regex.Pattern; + +public class TrafficLight { + + public void start(String secondsAsString) { + if (isNumber(secondsAsString)) { + System.out.println("ERROR! Seconds must be a number"); + return; + } + long seconds = Long.parseLong(secondsAsString); + if (seconds < 0) { + System.out.println("ERROR! The seconds are negative"); + return; + } + if (seconds > 86401) { + System.out.println("ERROR! The seconds are too long"); + return; + } + Instant instant = Instant.ofEpochSecond(seconds); + String fullTime = instant.toString(); + int size = fullTime.length(); + int onlySeconds = Integer.parseInt(fullTime.substring(size - 3, size - 1)); + if (onlySeconds >= 0 && onlySeconds <= 35) { + System.out.println("Зеленый"); + } else if (onlySeconds >= 40 && onlySeconds <= 55) { + System.out.println("Красный"); + } else { + System.out.println("Желтый"); + } + } + + private boolean isNumber(String str) { + return Pattern.matches(str, "-?[0-9]+"); + } +} From 431d20179bb6e2c97530974f380556a3a070444f Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Tue, 20 Jul 2021 01:19:23 +0300 Subject: [PATCH 07/20] Rename package with homework 3 --- README.md | 3 +++ .../java/{homework_2 => homework_3}/pyramidprinter/Main.java | 2 +- .../pyramidprinter/PyramidPrinter.java | 2 +- .../java/{homework_2 => homework_3}/randomcharstable/Main.java | 2 +- .../randomcharstable/RandomCharsTable.java | 2 +- .../java/{homework_2 => homework_3}/trafficlight/Main.java | 2 +- .../{homework_2 => homework_3}/trafficlight/TrafficLight.java | 2 +- 7 files changed, 9 insertions(+), 6 deletions(-) rename src/main/java/{homework_2 => homework_3}/pyramidprinter/Main.java (83%) rename src/main/java/{homework_2 => homework_3}/pyramidprinter/PyramidPrinter.java (95%) rename src/main/java/{homework_2 => homework_3}/randomcharstable/Main.java (86%) rename src/main/java/{homework_2 => homework_3}/randomcharstable/RandomCharsTable.java (97%) rename src/main/java/{homework_2 => homework_3}/trafficlight/Main.java (83%) rename src/main/java/{homework_2 => homework_3}/trafficlight/TrafficLight.java (97%) diff --git a/README.md b/README.md index ee527ea5..fce380f1 100644 --- a/README.md +++ b/README.md @@ -5,5 +5,8 @@ | Number | Solution | Short description | --- | --- | --- | | HW1 | [Solution_1](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | +| HW3_1 | [Solution_3](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | +| HW3_2 | [Solution_3](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | +| HW3_3 | [Solution_3](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/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) diff --git a/src/main/java/homework_2/pyramidprinter/Main.java b/src/main/java/homework_3/pyramidprinter/Main.java similarity index 83% rename from src/main/java/homework_2/pyramidprinter/Main.java rename to src/main/java/homework_3/pyramidprinter/Main.java index 205d3d5c..7c14e55e 100644 --- a/src/main/java/homework_2/pyramidprinter/Main.java +++ b/src/main/java/homework_3/pyramidprinter/Main.java @@ -1,4 +1,4 @@ -package homework_2.pyramidprinter; +package homework_3.pyramidprinter; public class Main { diff --git a/src/main/java/homework_2/pyramidprinter/PyramidPrinter.java b/src/main/java/homework_3/pyramidprinter/PyramidPrinter.java similarity index 95% rename from src/main/java/homework_2/pyramidprinter/PyramidPrinter.java rename to src/main/java/homework_3/pyramidprinter/PyramidPrinter.java index 67111d0f..e9898052 100644 --- a/src/main/java/homework_2/pyramidprinter/PyramidPrinter.java +++ b/src/main/java/homework_3/pyramidprinter/PyramidPrinter.java @@ -1,4 +1,4 @@ -package homework_2.pyramidprinter; +package homework_3.pyramidprinter; import java.util.regex.Pattern; diff --git a/src/main/java/homework_2/randomcharstable/Main.java b/src/main/java/homework_3/randomcharstable/Main.java similarity index 86% rename from src/main/java/homework_2/randomcharstable/Main.java rename to src/main/java/homework_3/randomcharstable/Main.java index 5655738a..76799f98 100644 --- a/src/main/java/homework_2/randomcharstable/Main.java +++ b/src/main/java/homework_3/randomcharstable/Main.java @@ -1,4 +1,4 @@ -package homework_2.randomcharstable; +package homework_3.randomcharstable; public class Main { diff --git a/src/main/java/homework_2/randomcharstable/RandomCharsTable.java b/src/main/java/homework_3/randomcharstable/RandomCharsTable.java similarity index 97% rename from src/main/java/homework_2/randomcharstable/RandomCharsTable.java rename to src/main/java/homework_3/randomcharstable/RandomCharsTable.java index 9fa93dbf..4c546f48 100644 --- a/src/main/java/homework_2/randomcharstable/RandomCharsTable.java +++ b/src/main/java/homework_3/randomcharstable/RandomCharsTable.java @@ -1,4 +1,4 @@ -package homework_2.randomcharstable; +package homework_3.randomcharstable; import java.util.Random; import java.util.regex.Pattern; diff --git a/src/main/java/homework_2/trafficlight/Main.java b/src/main/java/homework_3/trafficlight/Main.java similarity index 83% rename from src/main/java/homework_2/trafficlight/Main.java rename to src/main/java/homework_3/trafficlight/Main.java index 306f9cd1..52ac00c6 100644 --- a/src/main/java/homework_2/trafficlight/Main.java +++ b/src/main/java/homework_3/trafficlight/Main.java @@ -1,4 +1,4 @@ -package homework_2.trafficlight; +package homework_3.trafficlight; public class Main { diff --git a/src/main/java/homework_2/trafficlight/TrafficLight.java b/src/main/java/homework_3/trafficlight/TrafficLight.java similarity index 97% rename from src/main/java/homework_2/trafficlight/TrafficLight.java rename to src/main/java/homework_3/trafficlight/TrafficLight.java index e8b7aa63..2db69064 100644 --- a/src/main/java/homework_2/trafficlight/TrafficLight.java +++ b/src/main/java/homework_3/trafficlight/TrafficLight.java @@ -1,4 +1,4 @@ -package homework_2.trafficlight; +package homework_3.trafficlight; import java.time.Instant; import java.util.regex.Pattern; From 3452255ba2753e2804aaa2cbc90ad333d7bedc91 Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Tue, 20 Jul 2021 01:26:11 +0300 Subject: [PATCH 08/20] Added new homework and codingbat to README.md and fix style --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fce380f1..0223909d 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,14 @@ # Java Core June 2021 -## *Nikolaev Artem* +## *Antufiev Semen* | Number | Solution | Short description | --- | --- | --- | | HW1 | [Solution_1](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | -| HW3_1 | [Solution_3](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | -| HW3_2 | [Solution_3](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | -| HW3_3 | [Solution_3](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | +| HW3_1 | [Pyramid printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3/pyramidprinter) | The app that reads input arguments and prints pyramid| +| HW3_1 | [Traffic light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3/trafficlight) | The app that reads input arguments and prints color of traffic light now| +| HW3_3 | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3/randomcharstable) | The app that reads input arguments and prints table with random charset| [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) + +[codingbat](https://codingbat.com/done?user=alexantufiev@gmail.com&tag=8698341536) From 8cc135ac6d075716445d1b65ee72b902a28b5d0c Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Sun, 25 Jul 2021 23:16:31 +0300 Subject: [PATCH 09/20] Rename package and init method to homework on run() --- .../java/{homework_3 => homework_2}/pyramidprinter/Main.java | 4 ++-- .../pyramidprinter/PyramidPrinter.java | 4 ++-- .../{homework_3 => homework_2}/randomcharstable/Main.java | 4 ++-- .../randomcharstable/RandomCharsTable.java | 4 ++-- .../java/{homework_3 => homework_2}/trafficlight/Main.java | 4 ++-- .../{homework_3 => homework_2}/trafficlight/TrafficLight.java | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) rename src/main/java/{homework_3 => homework_2}/pyramidprinter/Main.java (64%) rename src/main/java/{homework_3 => homework_2}/pyramidprinter/PyramidPrinter.java (89%) rename src/main/java/{homework_3 => homework_2}/randomcharstable/Main.java (70%) rename src/main/java/{homework_3 => homework_2}/randomcharstable/RandomCharsTable.java (95%) rename src/main/java/{homework_3 => homework_2}/trafficlight/Main.java (65%) rename src/main/java/{homework_3 => homework_2}/trafficlight/TrafficLight.java (93%) diff --git a/src/main/java/homework_3/pyramidprinter/Main.java b/src/main/java/homework_2/pyramidprinter/Main.java similarity index 64% rename from src/main/java/homework_3/pyramidprinter/Main.java rename to src/main/java/homework_2/pyramidprinter/Main.java index 7c14e55e..3082ec19 100644 --- a/src/main/java/homework_3/pyramidprinter/Main.java +++ b/src/main/java/homework_2/pyramidprinter/Main.java @@ -1,9 +1,9 @@ -package homework_3.pyramidprinter; +package homework_2.pyramidprinter; public class Main { public static void main(String[] args) { PyramidPrinter pyramidPrinter = new PyramidPrinter(); - pyramidPrinter.start(args[0]); + pyramidPrinter.run(args[0]); } } diff --git a/src/main/java/homework_3/pyramidprinter/PyramidPrinter.java b/src/main/java/homework_2/pyramidprinter/PyramidPrinter.java similarity index 89% rename from src/main/java/homework_3/pyramidprinter/PyramidPrinter.java rename to src/main/java/homework_2/pyramidprinter/PyramidPrinter.java index e9898052..1f16c118 100644 --- a/src/main/java/homework_3/pyramidprinter/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramidprinter/PyramidPrinter.java @@ -1,10 +1,10 @@ -package homework_3.pyramidprinter; +package homework_2.pyramidprinter; import java.util.regex.Pattern; public class PyramidPrinter { - public void start(String sizeAsString) { + public void run(String sizeAsString) { if (!isNumber(sizeAsString)) { System.out.println("ERROR! This is not a number"); return; diff --git a/src/main/java/homework_3/randomcharstable/Main.java b/src/main/java/homework_2/randomcharstable/Main.java similarity index 70% rename from src/main/java/homework_3/randomcharstable/Main.java rename to src/main/java/homework_2/randomcharstable/Main.java index 76799f98..944b2bb4 100644 --- a/src/main/java/homework_3/randomcharstable/Main.java +++ b/src/main/java/homework_2/randomcharstable/Main.java @@ -1,10 +1,10 @@ -package homework_3.randomcharstable; +package homework_2.randomcharstable; public class Main { public static void main(String[] args) { RandomCharsTable randomCharsTable = new RandomCharsTable(); String[] strings = {"5", "2", "even"}; - randomCharsTable.start(strings); + randomCharsTable.run(strings); } } diff --git a/src/main/java/homework_3/randomcharstable/RandomCharsTable.java b/src/main/java/homework_2/randomcharstable/RandomCharsTable.java similarity index 95% rename from src/main/java/homework_3/randomcharstable/RandomCharsTable.java rename to src/main/java/homework_2/randomcharstable/RandomCharsTable.java index 4c546f48..62dcb1b5 100644 --- a/src/main/java/homework_3/randomcharstable/RandomCharsTable.java +++ b/src/main/java/homework_2/randomcharstable/RandomCharsTable.java @@ -1,10 +1,10 @@ -package homework_3.randomcharstable; +package homework_2.randomcharstable; import java.util.Random; import java.util.regex.Pattern; public class RandomCharsTable { - public void start(String[] params) { + public void run(String[] params) { if (!isNumber(params[0]) || !isNumber(params[1])) { System.out.println("ERROR! This is not a number"); return; diff --git a/src/main/java/homework_3/trafficlight/Main.java b/src/main/java/homework_2/trafficlight/Main.java similarity index 65% rename from src/main/java/homework_3/trafficlight/Main.java rename to src/main/java/homework_2/trafficlight/Main.java index 52ac00c6..71d7f5f7 100644 --- a/src/main/java/homework_3/trafficlight/Main.java +++ b/src/main/java/homework_2/trafficlight/Main.java @@ -1,9 +1,9 @@ -package homework_3.trafficlight; +package homework_2.trafficlight; public class Main { public static void main(String[] args) { TrafficLight trafficLight = new TrafficLight(); - trafficLight.start(args[0]); + trafficLight.run(args[0]); } } diff --git a/src/main/java/homework_3/trafficlight/TrafficLight.java b/src/main/java/homework_2/trafficlight/TrafficLight.java similarity index 93% rename from src/main/java/homework_3/trafficlight/TrafficLight.java rename to src/main/java/homework_2/trafficlight/TrafficLight.java index 2db69064..e3f3a87a 100644 --- a/src/main/java/homework_3/trafficlight/TrafficLight.java +++ b/src/main/java/homework_2/trafficlight/TrafficLight.java @@ -1,11 +1,11 @@ -package homework_3.trafficlight; +package homework_2.trafficlight; import java.time.Instant; import java.util.regex.Pattern; public class TrafficLight { - public void start(String secondsAsString) { + public void run(String secondsAsString) { if (isNumber(secondsAsString)) { System.out.println("ERROR! Seconds must be a number"); return; From de07ae6f09b5e268f5899141ea557d5e52ca1397 Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Mon, 26 Jul 2021 21:50:45 +0300 Subject: [PATCH 10/20] Rename packages --- .../homework_2/{pyramidprinter => pyramid_printer}/Main.java | 2 +- .../{pyramidprinter => pyramid_printer}/PyramidPrinter.java | 2 +- .../{randomcharstable => random_chars_table}/Main.java | 2 +- .../RandomCharsTable.java | 2 +- .../java/homework_2/{trafficlight => traffic_light}/Main.java | 2 +- .../{trafficlight => traffic_light}/TrafficLight.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/homework_2/{pyramidprinter => pyramid_printer}/Main.java (82%) rename src/main/java/homework_2/{pyramidprinter => pyramid_printer}/PyramidPrinter.java (95%) rename src/main/java/homework_2/{randomcharstable => random_chars_table}/Main.java (85%) rename src/main/java/homework_2/{randomcharstable => random_chars_table}/RandomCharsTable.java (97%) rename src/main/java/homework_2/{trafficlight => traffic_light}/Main.java (83%) rename src/main/java/homework_2/{trafficlight => traffic_light}/TrafficLight.java (97%) diff --git a/src/main/java/homework_2/pyramidprinter/Main.java b/src/main/java/homework_2/pyramid_printer/Main.java similarity index 82% rename from src/main/java/homework_2/pyramidprinter/Main.java rename to src/main/java/homework_2/pyramid_printer/Main.java index 3082ec19..8b2ba643 100644 --- a/src/main/java/homework_2/pyramidprinter/Main.java +++ b/src/main/java/homework_2/pyramid_printer/Main.java @@ -1,4 +1,4 @@ -package homework_2.pyramidprinter; +package homework_2.pyramid_printer; public class Main { diff --git a/src/main/java/homework_2/pyramidprinter/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java similarity index 95% rename from src/main/java/homework_2/pyramidprinter/PyramidPrinter.java rename to src/main/java/homework_2/pyramid_printer/PyramidPrinter.java index 1f16c118..5846577d 100644 --- a/src/main/java/homework_2/pyramidprinter/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -1,4 +1,4 @@ -package homework_2.pyramidprinter; +package homework_2.pyramid_printer; import java.util.regex.Pattern; diff --git a/src/main/java/homework_2/randomcharstable/Main.java b/src/main/java/homework_2/random_chars_table/Main.java similarity index 85% rename from src/main/java/homework_2/randomcharstable/Main.java rename to src/main/java/homework_2/random_chars_table/Main.java index 944b2bb4..34787c5d 100644 --- a/src/main/java/homework_2/randomcharstable/Main.java +++ b/src/main/java/homework_2/random_chars_table/Main.java @@ -1,4 +1,4 @@ -package homework_2.randomcharstable; +package homework_2.random_chars_table; public class Main { diff --git a/src/main/java/homework_2/randomcharstable/RandomCharsTable.java b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java similarity index 97% rename from src/main/java/homework_2/randomcharstable/RandomCharsTable.java rename to src/main/java/homework_2/random_chars_table/RandomCharsTable.java index 62dcb1b5..e2be2fe0 100644 --- a/src/main/java/homework_2/randomcharstable/RandomCharsTable.java +++ b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java @@ -1,4 +1,4 @@ -package homework_2.randomcharstable; +package homework_2.random_chars_table; import java.util.Random; import java.util.regex.Pattern; diff --git a/src/main/java/homework_2/trafficlight/Main.java b/src/main/java/homework_2/traffic_light/Main.java similarity index 83% rename from src/main/java/homework_2/trafficlight/Main.java rename to src/main/java/homework_2/traffic_light/Main.java index 71d7f5f7..2f71a7f9 100644 --- a/src/main/java/homework_2/trafficlight/Main.java +++ b/src/main/java/homework_2/traffic_light/Main.java @@ -1,4 +1,4 @@ -package homework_2.trafficlight; +package homework_2.traffic_light; public class Main { diff --git a/src/main/java/homework_2/trafficlight/TrafficLight.java b/src/main/java/homework_2/traffic_light/TrafficLight.java similarity index 97% rename from src/main/java/homework_2/trafficlight/TrafficLight.java rename to src/main/java/homework_2/traffic_light/TrafficLight.java index e3f3a87a..0043d5fc 100644 --- a/src/main/java/homework_2/trafficlight/TrafficLight.java +++ b/src/main/java/homework_2/traffic_light/TrafficLight.java @@ -1,4 +1,4 @@ -package homework_2.trafficlight; +package homework_2.traffic_light; import java.time.Instant; import java.util.regex.Pattern; From 963ac04b4c74302c94744441e9264f391d6312ce Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Mon, 26 Jul 2021 22:05:54 +0300 Subject: [PATCH 11/20] Complete the homework 3 --- src/main/java/homework_3/ImmutableClass.java | 65 ++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/main/java/homework_3/ImmutableClass.java diff --git a/src/main/java/homework_3/ImmutableClass.java b/src/main/java/homework_3/ImmutableClass.java new file mode 100644 index 00000000..7b6efed7 --- /dev/null +++ b/src/main/java/homework_3/ImmutableClass.java @@ -0,0 +1,65 @@ +package homework_3; + + +/* +The class must be declared as final +Data members in the class must be declared as private +Data members in the class must be declared as final +A parameterized constructor should initialize all the fields performing a deep copy +Deep Copy of objects should be performed in the getter methods +No setters + */ + + +public final class ImmutableClass { + + private final int age; + + private final int high; + + private final int weight; + + private final String name; + + public ImmutableClass(int age, int high, int weight, String name) { + this.age = age; + this.high = high; + this.weight = weight; + this.name = name; + } + + public ImmutableClass(int weight, int high) { + this.high = high; + this.weight = weight; + this.age = 10; + this.name = "Some person"; + } + + public int getAge() { + return age; + } + + public int getHigh() { + return high; + } + + public int getWeight() { + return weight; + } + + public String getName() { + return name; + } + + public ImmutableClass changeWeightAndHigh(int weight, int high) { + return new ImmutableClass(weight, high); + } + + public ImmutableClass changeName(String name) { + return new ImmutableClass(this.age, this.high, this.weight, name); + } + + public ImmutableClass changeAge(int age) { + return new ImmutableClass(age, this.high, this.weight, this.name); + } +} From 65f4556f973867fde355cfe4f22b35398b8d4014 Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Mon, 26 Jul 2021 22:08:15 +0300 Subject: [PATCH 12/20] Add homework 3 to README --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0223909d..b85ea411 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,10 @@ | Number | Solution | Short description | --- | --- | --- | | HW1 | [Solution_1](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | -| HW3_1 | [Pyramid printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3/pyramidprinter) | The app that reads input arguments and prints pyramid| -| HW3_1 | [Traffic light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3/trafficlight) | The app that reads input arguments and prints color of traffic light now| -| HW3_3 | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3/randomcharstable) | The app that reads input arguments and prints table with random charset| +| HW2_1 | [Pyramid printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3/pyramidprinter) | The app that reads input arguments and prints pyramid| +| HW2_2 | [Traffic light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3/trafficlight) | The app that reads input arguments and prints color of traffic light now| +| HW2_3 | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3/randomcharstable) | The app that reads input arguments and prints table with random charset| +| HW3 | [Immutable_class](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3) | Example of immutable class [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) From 0ca6164b3b4547510a9e60ab659f7cbcf8ecc3b9 Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Mon, 26 Jul 2021 22:10:03 +0300 Subject: [PATCH 13/20] Fix README urls for homework 2 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b85ea411..9136907f 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,9 @@ | Number | Solution | Short description | --- | --- | --- | | HW1 | [Solution_1](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | -| HW2_1 | [Pyramid printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3/pyramidprinter) | The app that reads input arguments and prints pyramid| -| HW2_2 | [Traffic light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3/trafficlight) | The app that reads input arguments and prints color of traffic light now| -| HW2_3 | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3/randomcharstable) | The app that reads input arguments and prints table with random charset| +| HW2_1 | [Pyramid printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_2/pyramid_printer) | The app that reads input arguments and prints pyramid| +| HW2_2 | [Traffic light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_2/traffic_light) | The app that reads input arguments and prints color of traffic light now| +| HW2_3 | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_2/random_chars_table/randomcharstable) | The app that reads input arguments and prints table with random charset| | HW3 | [Immutable_class](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3) | Example of immutable class [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) From 770b5c8a2e4c0d51a6ed9c1907657a27e516409c Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Fri, 30 Jul 2021 00:10:00 +0300 Subject: [PATCH 14/20] Add scanner to homework 2 --- src/main/java/homework_2/pyramid_printer/Main.java | 4 +++- .../java/homework_2/pyramid_printer/PyramidPrinter.java | 5 ++++- src/main/java/homework_2/random_chars_table/Main.java | 3 +-- .../homework_2/random_chars_table/RandomCharsTable.java | 8 +++++++- src/main/java/homework_2/traffic_light/Main.java | 2 +- src/main/java/homework_2/traffic_light/TrafficLight.java | 5 ++++- 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/main/java/homework_2/pyramid_printer/Main.java b/src/main/java/homework_2/pyramid_printer/Main.java index 8b2ba643..15409cef 100644 --- a/src/main/java/homework_2/pyramid_printer/Main.java +++ b/src/main/java/homework_2/pyramid_printer/Main.java @@ -4,6 +4,8 @@ public class Main { public static void main(String[] args) { PyramidPrinter pyramidPrinter = new PyramidPrinter(); - pyramidPrinter.run(args[0]); + 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 5846577d..976cb9d6 100644 --- a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -1,10 +1,13 @@ package homework_2.pyramid_printer; +import java.util.Scanner; import java.util.regex.Pattern; public class PyramidPrinter { - public void run(String sizeAsString) { + public void run() { + Scanner scanner = new Scanner(System.in); + String sizeAsString = scanner.nextLine(); if (!isNumber(sizeAsString)) { System.out.println("ERROR! This is not a number"); return; 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 34787c5d..e359a82c 100644 --- a/src/main/java/homework_2/random_chars_table/Main.java +++ b/src/main/java/homework_2/random_chars_table/Main.java @@ -4,7 +4,6 @@ public class Main { public static void main(String[] args) { RandomCharsTable randomCharsTable = new RandomCharsTable(); - String[] strings = {"5", "2", "even"}; - randomCharsTable.run(strings); + 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 e2be2fe0..3c76712b 100644 --- a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java +++ b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java @@ -1,10 +1,16 @@ package homework_2.random_chars_table; import java.util.Random; +import java.util.Scanner; import java.util.regex.Pattern; public class RandomCharsTable { - public void run(String[] params) { + public void run() { + Scanner scanner = new Scanner(System.in); + String[] params = new String[3]; + for (int i = 0; i < params.length; i++) { + params[i] = scanner.next(); + } if (!isNumber(params[0]) || !isNumber(params[1])) { System.out.println("ERROR! This is not a number"); return; diff --git a/src/main/java/homework_2/traffic_light/Main.java b/src/main/java/homework_2/traffic_light/Main.java index 2f71a7f9..0b7b67da 100644 --- a/src/main/java/homework_2/traffic_light/Main.java +++ b/src/main/java/homework_2/traffic_light/Main.java @@ -4,6 +4,6 @@ public class Main { public static void main(String[] args) { TrafficLight trafficLight = new TrafficLight(); - trafficLight.run(args[0]); + 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 0043d5fc..9f331cc7 100644 --- a/src/main/java/homework_2/traffic_light/TrafficLight.java +++ b/src/main/java/homework_2/traffic_light/TrafficLight.java @@ -1,11 +1,14 @@ package homework_2.traffic_light; import java.time.Instant; +import java.util.Scanner; import java.util.regex.Pattern; public class TrafficLight { - public void run(String secondsAsString) { + public void run() { + Scanner scanner = new Scanner(System.in); + String secondsAsString = scanner.next(); if (isNumber(secondsAsString)) { System.out.println("ERROR! Seconds must be a number"); return; From 7a446d2de6236bd8fee988ff52c3073076c9b464 Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Thu, 5 Aug 2021 19:33:27 +0300 Subject: [PATCH 15/20] Rework README.md and fix output message for incorrect params --- README.md | 2 +- .../java/homework_2/pyramid_printer/PyramidPrinter.java | 7 +++++-- .../homework_2/random_chars_table/RandomCharsTable.java | 7 ++++--- src/main/java/homework_2/traffic_light/TrafficLight.java | 8 +++++--- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 9136907f..8f82d272 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ | HW1 | [Solution_1](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_1) | The app that reads input arguments and prints them, until "error" argument | | HW2_1 | [Pyramid printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_2/pyramid_printer) | The app that reads input arguments and prints pyramid| | HW2_2 | [Traffic light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_2/traffic_light) | The app that reads input arguments and prints color of traffic light now| -| HW2_3 | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_2/random_chars_table/randomcharstable) | The app that reads input arguments and prints table with random charset| +| HW2_3 | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_2/random_chars_table) | The app that reads input arguments and prints table with random charset| | HW3 | [Immutable_class](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3) | Example of immutable class [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) diff --git a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java index 976cb9d6..107f0f6d 100644 --- a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -5,16 +5,19 @@ public class PyramidPrinter { + public static final String ERROR_MESSAGE = "Only 1 non-negative integer is allowed as passed parameter"; + public void run() { Scanner scanner = new Scanner(System.in); String sizeAsString = scanner.nextLine(); + if (!isNumber(sizeAsString)) { - System.out.println("ERROR! This is not a number"); + System.out.println(ERROR_MESSAGE); return; } int size = Integer.parseInt(sizeAsString); if (size < 0) { - System.out.println("ERROR! Size is negative"); + System.out.println(ERROR_MESSAGE); return; } for (int i = 0; i < size; i++) { 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 3c76712b..d6249570 100644 --- a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java +++ b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java @@ -5,6 +5,7 @@ import java.util.regex.Pattern; public class RandomCharsTable { + public static final String ERROR_MESSAGE = "Passed parameters should match the format [positive integer] [positive integer] [even|odd]"; public void run() { Scanner scanner = new Scanner(System.in); String[] params = new String[3]; @@ -12,7 +13,7 @@ public void run() { params[i] = scanner.next(); } if (!isNumber(params[0]) || !isNumber(params[1])) { - System.out.println("ERROR! This is not a number"); + System.out.println(ERROR_MESSAGE); return; } int rows = Integer.parseInt(params[0]); @@ -21,7 +22,7 @@ public void run() { return; } if (rows < 0 || columns < 0) { - System.out.println("ERROR! One of the numbers is negative"); + System.out.println(ERROR_MESSAGE); return; } String strategy = params[2]; @@ -31,7 +32,7 @@ public void run() { } else if (strategy.equals("odd")){ strategyMod = 1; } else { - System.out.println("ERROR! Unknown strategy"); + System.out.println(ERROR_MESSAGE); return; } StringBuilder result = new StringBuilder(strategy + " letters - "); diff --git a/src/main/java/homework_2/traffic_light/TrafficLight.java b/src/main/java/homework_2/traffic_light/TrafficLight.java index 9f331cc7..fa62351e 100644 --- a/src/main/java/homework_2/traffic_light/TrafficLight.java +++ b/src/main/java/homework_2/traffic_light/TrafficLight.java @@ -6,20 +6,22 @@ public class TrafficLight { + public static final String ERROR_MESSAGE = "Only 1 non-negative integer is allowed as passed parameter"; + public void run() { Scanner scanner = new Scanner(System.in); String secondsAsString = scanner.next(); if (isNumber(secondsAsString)) { - System.out.println("ERROR! Seconds must be a number"); + System.out.println(ERROR_MESSAGE); return; } long seconds = Long.parseLong(secondsAsString); if (seconds < 0) { - System.out.println("ERROR! The seconds are negative"); + System.out.println(ERROR_MESSAGE); return; } if (seconds > 86401) { - System.out.println("ERROR! The seconds are too long"); + System.out.println(ERROR_MESSAGE); return; } Instant instant = Instant.ofEpochSecond(seconds); From c7a5739cac04f2697dbf8131f55cb4621bad447a Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Sat, 7 Aug 2021 16:43:02 +0300 Subject: [PATCH 16/20] Complete homework 4 --- .../java/homework_2/traffic_light/Main.java | 2 + .../custom_annotation/DefaulValueImpl.java | 72 +++++++++++++++++++ .../custom_annotation/DefaultValue.java | 15 ++++ .../homework_4/custom_annotation/Main.java | 60 ++++++++++++++++ .../custom_file_reader/CustomFileReader.java | 56 +++++++++++++++ .../homework_4/custom_file_reader/Main.java | 10 +++ src/main/java/homework_4/singleton/Main.java | 12 ++++ .../java/homework_4/singleton/Singleton.java | 23 ++++++ .../resources/custom_file_reader/input.txt | 1 + 9 files changed, 251 insertions(+) create mode 100644 src/main/java/homework_4/custom_annotation/DefaulValueImpl.java create mode 100644 src/main/java/homework_4/custom_annotation/DefaultValue.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/input.txt diff --git a/src/main/java/homework_2/traffic_light/Main.java b/src/main/java/homework_2/traffic_light/Main.java index 0b7b67da..747b3666 100644 --- a/src/main/java/homework_2/traffic_light/Main.java +++ b/src/main/java/homework_2/traffic_light/Main.java @@ -6,4 +6,6 @@ public static void main(String[] args) { TrafficLight trafficLight = new TrafficLight(); trafficLight.run(); } + + } diff --git a/src/main/java/homework_4/custom_annotation/DefaulValueImpl.java b/src/main/java/homework_4/custom_annotation/DefaulValueImpl.java new file mode 100644 index 00000000..982cd43f --- /dev/null +++ b/src/main/java/homework_4/custom_annotation/DefaulValueImpl.java @@ -0,0 +1,72 @@ +package homework_4.custom_annotation; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class DefaulValueImpl { + + public void insetDefaultValue(Object object) throws IllegalAccessException, InvocationTargetException { + setDefaultValueToFields(object, object.getClass()); + setDefaultValueToMethods(object, object.getClass()); + + + } + + private void setDefaultValueToMethods(Object object, Class clazz) throws InvocationTargetException, IllegalAccessException { + List collectPrivateMethods = Arrays.stream(clazz.getDeclaredMethods()) + .filter((o) -> o.isAnnotationPresent(DefaultValue.class)) + .collect(Collectors.toList()); + setDefaultValueMethods(collectPrivateMethods, clazz, object); + } + + private void setDefaultValueToFields(Object object, Class clazz) throws IllegalAccessException { + List collectPublic = Arrays.stream(clazz.getFields()) + .filter((o) -> o.isAnnotationPresent(DefaultValue.class)) + .collect(Collectors.toList()); + getDefaultFields(collectPublic, clazz, object); + + List collectPrivate = Arrays.stream(clazz.getDeclaredFields()) + .filter((o) -> o.isAnnotationPresent(DefaultValue.class)) + .collect(Collectors.toList()); + getDefaultFields(collectPrivate, clazz, object); + + } + + private void setDefaultValueMethods(List collectMethods, Class clazz, Object object) throws InvocationTargetException, IllegalAccessException { + for (Method method : collectMethods) { + DefaultValue annotation = method.getAnnotation(DefaultValue.class); + String value = annotation.value(); + Class type = method.getParameterTypes()[0]; + method.setAccessible(true); + if (type == Integer.class || type == int.class) { + method.invoke(object, Integer.parseInt(value)); + } else if (type == Double.class || type == double.class) { + method.invoke(object, Double.parseDouble(value)); + } else { + method.invoke(object, value); + } + } + } + + private void getDefaultFields(List collect, Class clazz, Object object) throws IllegalAccessException { + for (Field field : collect) { + DefaultValue annotation = field.getAnnotation(DefaultValue.class); + String value = annotation.value(); + Class type = field.getType(); + field.setAccessible(true); + if (type == Integer.class || type == int.class) { + if (field.get(object) == null || field.get(object).equals(0)) + field.set(object, Integer.parseInt(value)); + } else if (type == Double.class || type == double.class) { + if (field.get(object) == null || field.get(object).equals(0.0)) + field.set(object, Double.parseDouble(value)); + } else { + if (field.get(object) == null || field.get(object).equals("")) field.set(object, value); + } + } + } +} diff --git a/src/main/java/homework_4/custom_annotation/DefaultValue.java b/src/main/java/homework_4/custom_annotation/DefaultValue.java new file mode 100644 index 00000000..5325a90f --- /dev/null +++ b/src/main/java/homework_4/custom_annotation/DefaultValue.java @@ -0,0 +1,15 @@ +package homework_4.custom_annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, ElementType.FIELD}) +public @interface DefaultValue { + String value(); + +} 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..d1819e93 --- /dev/null +++ b/src/main/java/homework_4/custom_annotation/Main.java @@ -0,0 +1,60 @@ +package homework_4.custom_annotation; + +import java.lang.reflect.InvocationTargetException; + +public class Main { + + public static void main(String[] args) throws IllegalAccessException, InvocationTargetException { + Cat cat = new Cat(); + new DefaulValueImpl().insetDefaultValue(cat); + } +} + +class Cat { + @DefaultValue("1") + private int integer; + @DefaultValue("1.0") + private Double aDouble; + @DefaultValue("awdawd") + private String string; + + + public Cat(Integer integer, Double aDouble, String string) { + this.integer = integer; + this.aDouble = aDouble; + this.string = string; + } + + public Cat() { + } + + @DefaultValue("15") + public int method(int i) { + System.out.println(i); + return i; + } + + @DefaultValue("awdawd") + private String method2(String i) { + System.out.println(i); + return i; + } + + @DefaultValue("15.0") + protected Double method(Double i) { + System.out.println(i); + return i; + } + + public Integer getInteger() { + return integer; + } + + public Double getaDouble() { + return aDouble; + } + + public String getString() { + return string; + } +} \ 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..980d97f7 --- /dev/null +++ b/src/main/java/homework_4/custom_file_reader/CustomFileReader.java @@ -0,0 +1,56 @@ +package homework_4.custom_file_reader; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Scanner; +import java.util.stream.Stream; + +public class CustomFileReader { + + private static final String PATH = "src/main/resources/custom_file_reader/input.txt"; + + public CustomFileReader() { + } + + public void run1() { + File file = new File(PATH); + try (Scanner scanner = new Scanner(file)) { + String string = scanner.nextLine(); + String replace = string.replace(".", ""); + System.out.println(replace.replace(",", "")); + } catch (FileNotFoundException ignore) { + } + } + + public void run2() { + Path path = Paths.get(PATH); + try (Stream stream = Files.lines(path)) { + String result = stream + .flatMapToInt(CharSequence::chars) + .filter(c -> c != 44 && c != 46) + .mapToObj(i -> (char) i) + .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) + .toString(); + System.out.println(result); + } catch (IOException ignore) { + } + } + + public void run3() { + File file = new File(PATH); + try (FileReader fileReader = new FileReader(file)) { + BufferedReader bufferedReader = new BufferedReader(fileReader); + String line = bufferedReader.readLine(); + String replace = line.replace(".", ""); + System.out.println(replace.replace(",", "")); + } catch (IOException e) { + } + + } +} 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..e8db6df5 --- /dev/null +++ b/src/main/java/homework_4/custom_file_reader/Main.java @@ -0,0 +1,10 @@ +package homework_4.custom_file_reader; + +public class Main { + + public static void main(String[] args) { + new CustomFileReader().run1(); + new CustomFileReader().run2(); + new CustomFileReader().run3(); + } +} 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..88d979d4 --- /dev/null +++ b/src/main/java/homework_4/singleton/Main.java @@ -0,0 +1,12 @@ +package homework_4.singleton; + +public class Main { + + public static void main(String[] args) { + Singleton singleton = Singleton.getInstance(); + Singleton singleton1 = Singleton.getInstance(); + if (singleton == singleton1) { + System.out.println("yes"); + } + } +} 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..880d6b46 --- /dev/null +++ b/src/main/java/homework_4/singleton/Singleton.java @@ -0,0 +1,23 @@ +package homework_4.singleton; + +import java.util.Random; + +public class Singleton { + + private static Singleton singleton = null; + + private Singleton() { + + } + + public static Singleton getInstance() { + if (singleton == null) { + singleton = new Singleton(); + } + return singleton; + } + + public Integer getRandom() { + return new Random().nextInt(); + } +} diff --git a/src/main/resources/custom_file_reader/input.txt b/src/main/resources/custom_file_reader/input.txt new file mode 100644 index 00000000..4abee03a --- /dev/null +++ b/src/main/resources/custom_file_reader/input.txt @@ -0,0 +1 @@ +awdwadawda.awdaw,awdawdawd,awd,awd,awd,aw,da.wd.aw.da.wd.awd.aw.dawd,aw,da.wd,a. \ No newline at end of file From 560a704a46458789bfa7e40e5f9880c9f5e48f74 Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Sat, 7 Aug 2021 16:47:26 +0300 Subject: [PATCH 17/20] Add homework 4 to README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8f82d272..34e04d76 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,9 @@ | HW2_2 | [Traffic light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_2/traffic_light) | The app that reads input arguments and prints color of traffic light now| | HW2_3 | [Random chars table](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_2/random_chars_table) | The app that reads input arguments and prints table with random charset| | HW3 | [Immutable_class](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_3) | Example of immutable class - +| HW4_1 | [Custon_anotation](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_4/custom_annotation) | Custom annotation and handler +| HW4_2 | [Singleton](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_4/singleton) | Example of singleton class +| HW4_3 | [Custom_file_reader](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/SemenAntufiev/src/main/java/homework_4/custom_file_reader) | Work with file readers [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) [codingbat](https://codingbat.com/done?user=alexantufiev@gmail.com&tag=8698341536) From 6cc3fbe676b05b607e2054bb76de7585ae1e668a Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Mon, 9 Aug 2021 21:39:03 +0300 Subject: [PATCH 18/20] Add tests for homeworks --- build.gradle | 2 + .../pyramid_printer/PyramidPrinter.java | 8 +- .../random_chars_table/RandomCharsTable.java | 4 +- .../traffic_light/TrafficLight.java | 17 +-- src/main/java/homework_3/ImmutableClass.java | 15 ++ .../custom_annotation/DefaulValueImpl.java | 10 +- .../homework_4/custom_annotation/Main.java | 2 +- .../java/homework_4/singleton/Singleton.java | 6 - src/test/java/base/UnitBase.java | 73 ++++++++++ src/test/java/homework_1/HomeworkTest.java | 17 +++ .../pyramid_printer/PyramidPrinterTest.java | 49 +++++++ .../RandomCharsTableTest.java | 50 +++++++ .../traffic_light/TrafficLightTest.java | 58 ++++++++ .../java/homework_3/ImmutableClassTest.java | 23 ++++ .../CustomAnnotationTest.java | 129 ++++++++++++++++++ .../CustomFileReaderTest.java | 34 +++++ .../homework_4/singleton/SingletonTest.java | 15 ++ 17 files changed, 484 insertions(+), 28 deletions(-) create mode 100644 src/test/java/base/UnitBase.java create mode 100644 src/test/java/homework_1/HomeworkTest.java create mode 100644 src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java create mode 100644 src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java create mode 100644 src/test/java/homework_2/traffic_light/TrafficLightTest.java create mode 100644 src/test/java/homework_3/ImmutableClassTest.java create mode 100644 src/test/java/homework_4/custom_annotation/CustomAnnotationTest.java create mode 100644 src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java create mode 100644 src/test/java/homework_4/singleton/SingletonTest.java diff --git a/build.gradle b/build.gradle index b91dc843..386586ba 100644 --- a/build.gradle +++ b/build.gradle @@ -10,8 +10,10 @@ repositories { } dependencies { + implementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' + compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.20' } test { diff --git a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java index 107f0f6d..b9d8f221 100644 --- a/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java +++ b/src/main/java/homework_2/pyramid_printer/PyramidPrinter.java @@ -11,15 +11,11 @@ public void run() { Scanner scanner = new Scanner(System.in); String sizeAsString = scanner.nextLine(); - if (!isNumber(sizeAsString)) { + if (isNumber(sizeAsString)) { System.out.println(ERROR_MESSAGE); return; } int size = Integer.parseInt(sizeAsString); - if (size < 0) { - System.out.println(ERROR_MESSAGE); - return; - } for (int i = 0; i < size; i++) { for (int j = 0; j <= i; j++) { System.out.print("*"); @@ -29,6 +25,6 @@ public void run() { } private boolean isNumber(String str) { - return !Pattern.matches(str, "-?[0-9]+"); + return !Pattern.matches( "[0-9]+", str); } } 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 d6249570..b592032a 100644 --- a/src/main/java/homework_2/random_chars_table/RandomCharsTable.java +++ b/src/main/java/homework_2/random_chars_table/RandomCharsTable.java @@ -12,7 +12,7 @@ public void run() { for (int i = 0; i < params.length; i++) { params[i] = scanner.next(); } - if (!isNumber(params[0]) || !isNumber(params[1])) { + if (isNumber(params[0]) || isNumber(params[1])) { System.out.println(ERROR_MESSAGE); return; } @@ -51,6 +51,6 @@ public void run() { } private boolean isNumber(String str) { - return !Pattern.matches(str, "-?[0-9]+"); + return !Pattern.matches( "[0-9]+", str); } } diff --git a/src/main/java/homework_2/traffic_light/TrafficLight.java b/src/main/java/homework_2/traffic_light/TrafficLight.java index fa62351e..60e3a25f 100644 --- a/src/main/java/homework_2/traffic_light/TrafficLight.java +++ b/src/main/java/homework_2/traffic_light/TrafficLight.java @@ -7,6 +7,7 @@ public class TrafficLight { public static final String ERROR_MESSAGE = "Only 1 non-negative integer is allowed as passed parameter"; + public static final String DAY_OVER = "The day is over"; public void run() { Scanner scanner = new Scanner(System.in); @@ -20,24 +21,24 @@ public void run() { System.out.println(ERROR_MESSAGE); return; } - if (seconds > 86401) { - System.out.println(ERROR_MESSAGE); + if (seconds > 86399) { + System.out.println(DAY_OVER); return; } Instant instant = Instant.ofEpochSecond(seconds); String fullTime = instant.toString(); int size = fullTime.length(); int onlySeconds = Integer.parseInt(fullTime.substring(size - 3, size - 1)); - if (onlySeconds >= 0 && onlySeconds <= 35) { - System.out.println("Зеленый"); - } else if (onlySeconds >= 40 && onlySeconds <= 55) { - System.out.println("Красный"); + if (onlySeconds >= 0 && onlySeconds < 35) { + System.out.println("Green"); + } else if (onlySeconds >= 40 && onlySeconds < 55) { + System.out.println("Red"); } else { - System.out.println("Желтый"); + System.out.println("Yellow"); } } private boolean isNumber(String str) { - return Pattern.matches(str, "-?[0-9]+"); + return !Pattern.matches( "[0-9]+", str); } } diff --git a/src/main/java/homework_3/ImmutableClass.java b/src/main/java/homework_3/ImmutableClass.java index 7b6efed7..ff59afa1 100644 --- a/src/main/java/homework_3/ImmutableClass.java +++ b/src/main/java/homework_3/ImmutableClass.java @@ -11,6 +11,8 @@ */ +import java.util.Objects; + public final class ImmutableClass { private final int age; @@ -62,4 +64,17 @@ public ImmutableClass changeName(String name) { public ImmutableClass changeAge(int age) { return new ImmutableClass(age, this.high, this.weight, this.name); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ImmutableClass)) return false; + ImmutableClass that = (ImmutableClass) o; + return age == that.age && high == that.high && weight == that.weight && Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(age, high, weight, name); + } } diff --git a/src/main/java/homework_4/custom_annotation/DefaulValueImpl.java b/src/main/java/homework_4/custom_annotation/DefaulValueImpl.java index 982cd43f..d32b99e8 100644 --- a/src/main/java/homework_4/custom_annotation/DefaulValueImpl.java +++ b/src/main/java/homework_4/custom_annotation/DefaulValueImpl.java @@ -9,21 +9,21 @@ public class DefaulValueImpl { - public void insetDefaultValue(Object object) throws IllegalAccessException, InvocationTargetException { + public static void insetDefaultValue(Object object) throws IllegalAccessException, InvocationTargetException { setDefaultValueToFields(object, object.getClass()); setDefaultValueToMethods(object, object.getClass()); } - private void setDefaultValueToMethods(Object object, Class clazz) throws InvocationTargetException, IllegalAccessException { + private static void setDefaultValueToMethods(Object object, Class clazz) throws InvocationTargetException, IllegalAccessException { List collectPrivateMethods = Arrays.stream(clazz.getDeclaredMethods()) .filter((o) -> o.isAnnotationPresent(DefaultValue.class)) .collect(Collectors.toList()); setDefaultValueMethods(collectPrivateMethods, clazz, object); } - private void setDefaultValueToFields(Object object, Class clazz) throws IllegalAccessException { + private static void setDefaultValueToFields(Object object, Class clazz) throws IllegalAccessException { List collectPublic = Arrays.stream(clazz.getFields()) .filter((o) -> o.isAnnotationPresent(DefaultValue.class)) .collect(Collectors.toList()); @@ -36,7 +36,7 @@ private void setDefaultValueToFields(Object object, Class clazz) throws Illeg } - private void setDefaultValueMethods(List collectMethods, Class clazz, Object object) throws InvocationTargetException, IllegalAccessException { + private static void setDefaultValueMethods(List collectMethods, Class clazz, Object object) throws InvocationTargetException, IllegalAccessException { for (Method method : collectMethods) { DefaultValue annotation = method.getAnnotation(DefaultValue.class); String value = annotation.value(); @@ -52,7 +52,7 @@ private void setDefaultValueMethods(List collectMethods, Class clazz, } } - private void getDefaultFields(List collect, Class clazz, Object object) throws IllegalAccessException { + private static void getDefaultFields(List collect, Class clazz, Object object) throws IllegalAccessException { for (Field field : collect) { DefaultValue annotation = field.getAnnotation(DefaultValue.class); String value = annotation.value(); diff --git a/src/main/java/homework_4/custom_annotation/Main.java b/src/main/java/homework_4/custom_annotation/Main.java index d1819e93..87136bee 100644 --- a/src/main/java/homework_4/custom_annotation/Main.java +++ b/src/main/java/homework_4/custom_annotation/Main.java @@ -6,7 +6,7 @@ public class Main { public static void main(String[] args) throws IllegalAccessException, InvocationTargetException { Cat cat = new Cat(); - new DefaulValueImpl().insetDefaultValue(cat); + DefaulValueImpl.insetDefaultValue(cat); } } diff --git a/src/main/java/homework_4/singleton/Singleton.java b/src/main/java/homework_4/singleton/Singleton.java index 880d6b46..8e3f38e0 100644 --- a/src/main/java/homework_4/singleton/Singleton.java +++ b/src/main/java/homework_4/singleton/Singleton.java @@ -1,7 +1,5 @@ package homework_4.singleton; -import java.util.Random; - public class Singleton { private static Singleton singleton = null; @@ -16,8 +14,4 @@ public static Singleton getInstance() { } return singleton; } - - public Integer getRandom() { - return new Random().nextInt(); - } } diff --git a/src/test/java/base/UnitBase.java b/src/test/java/base/UnitBase.java new file mode 100644 index 00000000..8b46be60 --- /dev/null +++ b/src/test/java/base/UnitBase.java @@ -0,0 +1,73 @@ +package base; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + +public abstract class UnitBase { + + protected ByteArrayOutputStream mockedOut = new ByteArrayOutputStream(); + protected final PrintStream originalOut = System.out; + protected final InputStream originalIn = System.in; + + @BeforeEach + void setUpStreams() { + System.setOut(new PrintStream(mockedOut)); + } + + @AfterEach + void restoreStreams() { + System.setOut(originalOut); + System.setIn(originalIn); + } + + // mock input as if you wrote it to console by hand + protected void setInput(String input) { + System.setIn(new ByteArrayInputStream(input.getBytes())); + } + + // returns whole output as string, will all line separators and etc + protected String getOutput() { + return mockedOut.toString().trim(); + } + + // output as array, separated by lines. First line - getOutputLines()[0], and so on + protected String[] getOutputLines() { + return getOutput().split("\\r?\\n"); + } + + // can be used to remove some strings from output (ex. remove "Please input number"). Put after run() + protected void removeFromOutput(String s) { + try { + String output = mockedOut.toString(); + mockedOut.reset(); + mockedOut.write(output.replace(s, "").getBytes()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // can be used to print output to testing console. Useful for debugging. Put after run(); + protected void printOut() { + System.setOut(originalOut); + System.out.println(mockedOut); + System.setOut(new PrintStream(mockedOut)); + } + +// @Test +// void example() { +// setInput("2"); +// +// new PyramidPrinter().run(); +// printOut(); +// removeFromOutput("Please input number"): +// +// assertEquals("x", getOutputLines()[0]); +// assertEquals("xx", getOutputLines()[1]); +// } + +} diff --git a/src/test/java/homework_1/HomeworkTest.java b/src/test/java/homework_1/HomeworkTest.java new file mode 100644 index 00000000..9299270e --- /dev/null +++ b/src/test/java/homework_1/HomeworkTest.java @@ -0,0 +1,17 @@ +package homework_1; + +import base.UnitBase; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class HomeworkTest extends UnitBase { + + @Test + public void ErrorArgumentTest() { + String[] strings = new String[]{"word", "another word", "error"}; + String[] stringsExpected = new String[]{"word : 4 letters", "another word : 12 letters", "\u001B[41m" + "Alarm!" + "\u001B[0m"}; + Main.main(strings); + printOut(); + Assertions.assertArrayEquals(stringsExpected, getOutputLines()); + } +} \ 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 new file mode 100644 index 00000000..01b42456 --- /dev/null +++ b/src/test/java/homework_2/pyramid_printer/PyramidPrinterTest.java @@ -0,0 +1,49 @@ +package homework_2.pyramid_printer; + +import base.UnitBase; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + + +public class PyramidPrinterTest extends UnitBase { + + public static final String ERROR_MESSAGE = "Only 1 non-negative integer is allowed as passed parameter"; + + @Test + public void notNumberArgumentTest() { + PyramidPrinter pyramidPrinter = new PyramidPrinter(); + setInput("number"); + pyramidPrinter.run(); + printOut(); + Assertions.assertEquals(ERROR_MESSAGE, getOutputLines()[0]); + } + + @Test + public void zeroNumberArgument() { + PyramidPrinter pyramidPrinter = new PyramidPrinter(); + setInput("0"); + pyramidPrinter.run(); + printOut(); + Assertions.assertEquals("", getOutputLines()[0]); + } + + @Test + public void negativeNumberArgument() { + PyramidPrinter pyramidPrinter = new PyramidPrinter(); + setInput("-1"); + pyramidPrinter.run(); + printOut(); + Assertions.assertEquals(ERROR_MESSAGE, getOutputLines()[0]); + } + + @Test + public void pyramidTest() { + PyramidPrinter pyramidPrinter = new PyramidPrinter(); + setInput("5"); + pyramidPrinter.run(); + printOut(); + String[] expected = "* ** *** **** *****".split(" "); + String[] actual = getOutputLines(); + Assertions.assertArrayEquals(expected, actual); + } +} diff --git a/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java new file mode 100644 index 00000000..5fe63395 --- /dev/null +++ b/src/test/java/homework_2/random_chars_table/RandomCharsTableTest.java @@ -0,0 +1,50 @@ +package homework_2.random_chars_table; + +import base.UnitBase; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class RandomCharsTableTest extends UnitBase { + + public static final String ERROR_MESSAGE = "Passed parameters should match the format [positive integer] [positive integer] [even|odd]"; + + @Test + public void notNumberParamsTest() { + RandomCharsTable randomCharsTable = new RandomCharsTable(); + String input = "number1 number2 even"; + setInput(input); + randomCharsTable.run(); + printOut(); + Assertions.assertEquals(ERROR_MESSAGE, getOutputLines()[0]); + } + + @Test + public void thirdParamIncorrectTest() { + RandomCharsTable randomCharsTable = new RandomCharsTable(); + String input = "1 2 noEven"; + setInput(input); + randomCharsTable.run(); + printOut(); + Assertions.assertEquals(ERROR_MESSAGE, getOutputLines()[0]); + } + + @Test + public void correctParams1Test() { + RandomCharsTable randomCharsTable = new RandomCharsTable(); + String input = "1 2 even"; + setInput(input); + randomCharsTable.run(); + printOut(); + Assertions.assertEquals(2, getOutputLines().length); + } + + @Test + public void correctParams2Test() { + RandomCharsTable randomCharsTable = new RandomCharsTable(); + String input = "4 5 even"; + setInput(input); + randomCharsTable.run(); + printOut(); + Assertions.assertEquals(5, getOutputLines().length); + } +} 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..57d6f430 --- /dev/null +++ b/src/test/java/homework_2/traffic_light/TrafficLightTest.java @@ -0,0 +1,58 @@ +package homework_2.traffic_light; + +import base.UnitBase; +import java.util.stream.Stream; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +public class TrafficLightTest extends UnitBase { + + public static final String ERROR_MESSAGE = "Only 1 non-negative integer is allowed as passed parameter"; + public static final String DAY_OVER = "The day is over"; + + @Test + public void negativeParamTest() { + TrafficLight trafficLight = new TrafficLight(); + setInput("-1"); + trafficLight.run(); + Assertions.assertEquals(ERROR_MESSAGE, getOutputLines()[0]); + } + + @Test + public void notNumberParamTest() { + TrafficLight trafficLight = new TrafficLight(); + setInput("number"); + trafficLight.run(); + Assertions.assertEquals(ERROR_MESSAGE, getOutputLines()[0]); + } + + @Test + public void tooLargeNumberParamTest() { + TrafficLight trafficLight = new TrafficLight(); + setInput("86400"); + trafficLight.run(); + Assertions.assertEquals(DAY_OVER, getOutputLines()[0]); + } + + @ParameterizedTest + @MethodSource("testCases") + public void correctParam1Test(String input, String expected) { + TrafficLight trafficLight = new TrafficLight(); + setInput(input); + trafficLight.run(); + Assertions.assertEquals(expected, getOutputLines()[0]); + } + + public static Stream testCases() { + return Stream.of( + Arguments.of("0", "Green"), + Arguments.of("1", "Green"), + Arguments.of("35", "Yellow"), + Arguments.of("54", "Red") + ); + + } +} \ No newline at end of file diff --git a/src/test/java/homework_3/ImmutableClassTest.java b/src/test/java/homework_3/ImmutableClassTest.java new file mode 100644 index 00000000..0ec43a89 --- /dev/null +++ b/src/test/java/homework_3/ImmutableClassTest.java @@ -0,0 +1,23 @@ +package homework_3; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class ImmutableClassTest { + + @Test + public void immutableClassTest() { + ImmutableClass immutableClass = new ImmutableClass(21, 25, 6, "Vasya"); + ImmutableClass immutableClassAge = immutableClass.changeAge(2); + ImmutableClass immutableClassName = immutableClass.changeName("neVasya"); + ImmutableClass immutableClassHigh = immutableClass.changeWeightAndHigh(2, 22); + + Assertions.assertNotSame(immutableClass, immutableClassAge); + Assertions.assertNotSame(immutableClass, immutableClassHigh); + Assertions.assertNotSame(immutableClass, immutableClassName); + + Assertions.assertNotEquals(immutableClass, immutableClassAge); + Assertions.assertNotEquals(immutableClass, immutableClassName); + Assertions.assertNotEquals(immutableClass, immutableClassHigh); + } +} 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..9ab8af33 --- /dev/null +++ b/src/test/java/homework_4/custom_annotation/CustomAnnotationTest.java @@ -0,0 +1,129 @@ +package homework_4.custom_annotation; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class CustomAnnotationTest { + + @Test + public void defaultValueFieldIntegerTest() { + class TestClass { + @DefaultValue("21") + private Integer integerValue1; + + @DefaultValue("21") + private int integerValue2; + + public Integer getIntegerValue1() { + return integerValue1; + } + + public int getIntegerValue2() { + return integerValue2; + } + } + TestClass testClass = new TestClass(); + try { + DefaulValueImpl.insetDefaultValue(testClass); + Assertions.assertEquals(21, testClass.getIntegerValue1()); + Assertions.assertEquals(21, testClass.getIntegerValue2()); + } catch (Exception ignore) { + } + } + + @Test + public void defaultValueFieldDoubleTest() { + class TestClass { + @DefaultValue("21.2") + private Double doubleValue1; + + @DefaultValue("21.3") + private double doubleValue2; + + public Double getDoubleValue1() { + return doubleValue1; + } + + public double getDoubleValue2() { + return doubleValue2; + } + } + TestClass testClass = new TestClass(); + try { + DefaulValueImpl.insetDefaultValue(testClass); + Assertions.assertEquals(21.2, testClass.getDoubleValue1()); + Assertions.assertEquals(21.3, testClass.getDoubleValue2()); + } catch (Exception ignore) { + } + } + + @Test + public void defaultValueFieldStringTest() { + class TestClass { + @DefaultValue("value1") + private String stringValue1; + + @DefaultValue("anotherValue") + private String stringValue2; + + public String getStringValue1() { + return stringValue1; + } + + public String getStringValue2() { + return stringValue2; + } + } + TestClass testClass = new TestClass(); + try { + DefaulValueImpl.insetDefaultValue(testClass); + Assertions.assertEquals("value1", testClass.getStringValue1()); + Assertions.assertEquals("anotherValue", testClass.getStringValue2()); + } catch (Exception ignore) { + } + } + + @Test + public void defaultValueMethodIntegerParamTest() { + class TestClass { + private Integer integer; + private Double value; + private String str; + + @DefaultValue("11") + public void setInteger(Integer integer) { + this.integer = integer; + } + + @DefaultValue("12.3") + public void setValue(Double value) { + this.value = value; + } + + @DefaultValue("string") + public void setStr(String str) { + this.str = str; + } + + public Integer getInteger() { + return integer; + } + + public Double getDouble() { + return value; + } + + public String getString() { + return str; + } + } + TestClass testClass = new TestClass(); + try { + DefaulValueImpl.insetDefaultValue(testClass); + Assertions.assertEquals(11, testClass.getInteger()); + Assertions.assertEquals(12.3, testClass.getDouble()); + Assertions.assertEquals("string", testClass.getString()); + } catch (Exception ignore) { + } + } +} 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..5c9918f4 --- /dev/null +++ b/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java @@ -0,0 +1,34 @@ +package homework_4.custom_file_reader; + +import base.UnitBase; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class CustomFileReaderTest extends UnitBase { + + static final String EXPECTED_VALUE = "awdwadawdaawdawawdawdawdawdawdawdawdawdawdawdawdawdawdawdawda"; + + @Test + public void utilReaderTest() { + CustomFileReader customFileReader = new CustomFileReader(); + customFileReader.run1(); + printOut(); + Assertions.assertEquals(EXPECTED_VALUE, getOutputLines()[0]); + } + + @Test + public void nioReaderTest() { + CustomFileReader customFileReader = new CustomFileReader(); + customFileReader.run2(); + printOut(); + Assertions.assertEquals(EXPECTED_VALUE, getOutputLines()[0]); + } + + @Test + public void ioReaderTest() { + CustomFileReader customFileReader = new CustomFileReader(); + customFileReader.run3(); + printOut(); + Assertions.assertEquals(EXPECTED_VALUE, getOutputLines()[0]); + } +} 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..f1bc9d67 --- /dev/null +++ b/src/test/java/homework_4/singleton/SingletonTest.java @@ -0,0 +1,15 @@ +package homework_4.singleton; + +import homework_4.singleton.Singleton; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class SingletonTest { + + @Test + public void equalsLinkTest() { + Singleton singleton1 = Singleton.getInstance(); + Singleton singleton2 = Singleton.getInstance(); + Assertions.assertSame(singleton1, singleton2); + } +} From 2c248d5a286456c78a6371c617d628eb46c354a7 Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Mon, 9 Aug 2021 21:42:49 +0300 Subject: [PATCH 19/20] Rework test to custom file reader --- src/main/resources/custom_file_reader/input.txt | 2 +- .../homework_4/custom_file_reader/CustomFileReaderTest.java | 2 +- src/test/java/homework_4/singleton/SingletonTest.java | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/resources/custom_file_reader/input.txt b/src/main/resources/custom_file_reader/input.txt index 4abee03a..fd384710 100644 --- a/src/main/resources/custom_file_reader/input.txt +++ b/src/main/resources/custom_file_reader/input.txt @@ -1 +1 @@ -awdwadawda.awdaw,awdawdawd,awd,awd,awd,aw,da.wd.aw.da.wd.awd.aw.dawd,aw,da.wd,a. \ No newline at end of file +The text, in a way, consists of a number of sentences. One sentence, even a very widespread, complex one, cannot be called a text, since the text can be divided into independent sentences, and parts of the sentence are combined according to the laws of the syntax of a complex sentence, but not the text. \ 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 index 5c9918f4..1df28649 100644 --- a/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java +++ b/src/test/java/homework_4/custom_file_reader/CustomFileReaderTest.java @@ -6,7 +6,7 @@ public class CustomFileReaderTest extends UnitBase { - static final String EXPECTED_VALUE = "awdwadawdaawdawawdawdawdawdawdawdawdawdawdawdawdawdawdawdawda"; + static final String EXPECTED_VALUE = "The text in a way consists of a number of sentences One sentence even a very widespread complex one cannot be called a text since the text can be divided into independent sentences and parts of the sentence are combined according to the laws of the syntax of a complex sentence but not the text"; @Test public void utilReaderTest() { diff --git a/src/test/java/homework_4/singleton/SingletonTest.java b/src/test/java/homework_4/singleton/SingletonTest.java index f1bc9d67..68b4266f 100644 --- a/src/test/java/homework_4/singleton/SingletonTest.java +++ b/src/test/java/homework_4/singleton/SingletonTest.java @@ -1,6 +1,5 @@ package homework_4.singleton; -import homework_4.singleton.Singleton; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; From 70a947fd1f4f48af2df3988ae1481264e3e2c86d Mon Sep 17 00:00:00 2001 From: semenantufiev Date: Fri, 20 Aug 2021 00:37:03 +0300 Subject: [PATCH 20/20] Complete homework_5 --- .../CustomRegexMatcher.java | 14 ++++ .../homework_5/custom_regex_matcher/Main.java | 8 +++ .../java/homework_5/power_of_number/Main.java | 7 ++ .../power_of_number/PowerOfNumber.java | 32 ++++++++++ .../CustomRegexMatcherTest.java | 51 +++++++++++++++ .../power_of_number/PowerOfNumberTest.java | 64 +++++++++++++++++++ 6 files changed, 176 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/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/custom_regex_matchers/CustomRegexMatcherTest.java create mode 100644 src/test/java/homework_5/power_of_number/PowerOfNumberTest.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..5c6db802 --- /dev/null +++ b/src/main/java/homework_5/custom_regex_matcher/CustomRegexMatcher.java @@ -0,0 +1,14 @@ +package homework_5.custom_regex_matcher; + +import java.util.Scanner; +import java.util.regex.Pattern; + +public class CustomRegexMatcher { + + private final static String REG_EXP = "^([a-zA-Z0-9])[a-zA-Z0-9._]+@[a-z]+\\.[a-z]*"; + public boolean run() { + Scanner scanner = new Scanner(System.in); + String email = scanner.next(); + return Pattern.matches(REG_EXP, email); + } +} 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..0de49777 --- /dev/null +++ b/src/main/java/homework_5/custom_regex_matcher/Main.java @@ -0,0 +1,8 @@ +package homework_5.custom_regex_matcher; + +public class Main { + + public static void main(String[] args) { + System.out.println(new CustomRegexMatcher().run()); + } +} 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..930f2040 --- /dev/null +++ b/src/main/java/homework_5/power_of_number/Main.java @@ -0,0 +1,7 @@ +package homework_5.power_of_number; + +public class Main { + public static void main(String[] args) { + new PowerOfNumber().run(); + } +} 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..3426a6a9 --- /dev/null +++ b/src/main/java/homework_5/power_of_number/PowerOfNumber.java @@ -0,0 +1,32 @@ +package homework_5.power_of_number; + +import java.util.Scanner; +import java.util.regex.Pattern; + +public class PowerOfNumber { + private static final String ERROR_MESSAGE = "any problem with input (negative, less/more arguments, string) output: Only 2 non-negative integers are allowed"; + + public void run() { + Scanner scanner = new Scanner(System.in); + String number = scanner.next(); + String power = scanner.next(); + if (number == null || isNotNumber(number) || power == null || isNotNumber(power)) { + System.out.println(ERROR_MESSAGE); + return; + } + int integer = Integer.parseInt(number); + int intPower = Integer.parseInt(power); + System.out.println(recursivePower(integer, intPower)); + } + + private boolean isNotNumber(String str) { + return !Pattern.matches("[0-9]+", str); + } + + public int recursivePower(int number, int power) { + if (power == 0) { + return 1; + } + return number * recursivePower(number, --power); + } +} diff --git a/src/test/java/homework_5/custom_regex_matchers/CustomRegexMatcherTest.java b/src/test/java/homework_5/custom_regex_matchers/CustomRegexMatcherTest.java new file mode 100644 index 00000000..9547a7bb --- /dev/null +++ b/src/test/java/homework_5/custom_regex_matchers/CustomRegexMatcherTest.java @@ -0,0 +1,51 @@ +package homework_5.custom_regex_matchers; + +import base.UnitBase; +import homework_5.custom_regex_matcher.CustomRegexMatcher; +import java.util.stream.Stream; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +public class CustomRegexMatcherTest extends UnitBase { + + @ParameterizedTest + @MethodSource("testCasesIncorrect") + public void checkIncorrectEmails(String email) { + setInput(email); + CustomRegexMatcher customRegexMatcher = new CustomRegexMatcher(); + Assertions.assertFalse(customRegexMatcher.run()); + } + + public static Stream testCasesIncorrect() { + return Stream.of( + Arguments.of("_awdawd@mail.ru"), + Arguments.of("awdawmail.ru"), + Arguments.of("adwawd@.ru"), + Arguments.of("awdawdw@"), + Arguments.of("awdawdw@mail"), + Arguments.of("awdawdw@ru"), + Arguments.of("awdawdw@."), + Arguments.of("awdawdw@awda_ru") + ); + } + + @ParameterizedTest + @MethodSource("testCasesCorrect") + public void checkCorrectEmails(String email) { + setInput(email); + CustomRegexMatcher customRegexMatcher = new CustomRegexMatcher(); + Assertions.assertTrue(customRegexMatcher.run()); + } + + public static Stream testCasesCorrect() { + return Stream.of( + Arguments.of("awdawd@mail.ru"), + Arguments.of("awdaw@tinkof.com"), + Arguments.of("2.adwawd@group.ru"), + Arguments.of("2_adwawd@group.ru"), + Arguments.of("awda.213wdw@mail.net") + ); + } +} 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..28e2ba50 --- /dev/null +++ b/src/test/java/homework_5/power_of_number/PowerOfNumberTest.java @@ -0,0 +1,64 @@ +package homework_5.power_of_number; + +import base.UnitBase; +import java.util.stream.Stream; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +public class PowerOfNumberTest extends UnitBase { + + private static final String ERROR_MESSAGE = "any problem with input (negative, less/more arguments, string) output: Only 2 non-negative integers are allowed"; + + @ParameterizedTest + @MethodSource("notNumberCase") + public void paramsNotNumberTest(String firstParam, String secondParam) { + setInput(firstParam + " " + secondParam); + printOut(); + new PowerOfNumber().run(); + Assertions.assertEquals(ERROR_MESSAGE, getOutputLines()[0]); + } + + public static Stream notNumberCase() { + return Stream.of( + Arguments.of("string", "1"), + Arguments.of("1", "string"), + Arguments.of("string", "string") + ); + } + + @ParameterizedTest + @MethodSource("nullParamsCase") + public void paramsNullTest(String firstParam, String secondParam) { + setInput(firstParam + " " + secondParam); + printOut(); + new PowerOfNumber().run(); + Assertions.assertEquals(ERROR_MESSAGE, getOutputLines()[0]); + } + + public static Stream nullParamsCase() { + return Stream.of( + Arguments.of("1", null), + Arguments.of(null, "string"), + Arguments.of(null, null) + ); + } + + @ParameterizedTest + @MethodSource("correctValueCase") + public void correctValueTest(String firstParam, String secondParam, String expected) { + setInput(firstParam + " " + secondParam); + printOut(); + new PowerOfNumber().run(); + Assertions.assertEquals(expected, getOutputLines()[0]); + } + + public static Stream correctValueCase() { + return Stream.of( + Arguments.of("1", "2", "1"), + Arguments.of("2", "2", "4"), + Arguments.of("5", "5", "3125") + ); + } +}