diff --git a/README.md b/README.md index 5d686e9f..a96e9c85 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,14 @@ # Java Core June 2021 -## *Nikolaev Artem* +## *Skorodnikova Margarita* | 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/MargaritaSkorodnikova/src/main/java/Homework1) | The app that reads input arguments and prints them, until "error" argument | +| HW2 | [Traffic Light](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/MargaritaSkorodnikova/src/main/java/Homework2/Traffic_Light) | The app that reads input lines, checks them for digits, and calculates cycle of a traffic light and its color | +| HW2 | [Pyramid printer](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/MargaritaSkorodnikova/src/main/java/Homework2/Pyramid_Printer) | The app that reads input lines, turns them into numbers and prints a two-dimentional array of chars looking like a pyramid | +| HW2 | [Random Characters Table and Counter](https://github.com/NikolaevArtem/Java_Core_June_2021/tree/feature/MargaritaSkorodnikova/src/main/java/Homework2/Random_Chars_Table) | The app that reads input lines, defines the strategy, prints a table of random chars and calculates odd and even ones | [Link to markdown giude](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) + +[My CodingBat Page](https://codingbat.com/done?user=la.reine.m@gmail.com&tag=831576932) diff --git a/build.gradle b/build.gradle index b91dc843..0a2bd8cf 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,9 @@ repositories { dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' + // https://mvnrepository.com/artifact/org.projectlombok/lombok + compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.20' + } test { diff --git a/src/main/java/Homework1/Main.java b/src/main/java/Homework1/Main.java new file mode 100644 index 00000000..dc0d254b --- /dev/null +++ b/src/main/java/Homework1/Main.java @@ -0,0 +1,19 @@ +package Homework1; + +public class Main { + public static void main(String[] args) { + final String RED_COLOR = "\u001b[31m"; + final String CLOSE_COLOR = "\u001B[0m"; + + for (String s : args) { + if (s.equals("error")) { + System.out.println(RED_COLOR + "ALARM" + CLOSE_COLOR); + break; + + } else { + System.out.println(s + ": " + s.length() + " letters."); + } + } + } +} + diff --git a/src/main/java/Homework2/Pyramid_Printer/Main.java b/src/main/java/Homework2/Pyramid_Printer/Main.java new file mode 100644 index 00000000..7ec88e9f --- /dev/null +++ b/src/main/java/Homework2/Pyramid_Printer/Main.java @@ -0,0 +1,7 @@ +package Homework2.Pyramid_Printer; + +public class Main { + public static void main(String[] args) { + new PyramidPrinter().run(); + } +} diff --git a/src/main/java/Homework2/Pyramid_Printer/PyramidPrinter.java b/src/main/java/Homework2/Pyramid_Printer/PyramidPrinter.java new file mode 100644 index 00000000..f47e8856 --- /dev/null +++ b/src/main/java/Homework2/Pyramid_Printer/PyramidPrinter.java @@ -0,0 +1,49 @@ +package Homework2.Pyramid_Printer; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class PyramidPrinter { + public static final char X = 'x'; + public static final char SPACE = ' '; + + public char[][] getPyramidArray(int size) { + char pyramid[][] = new char[size][size]; + + for (int i = 0; i < size; i++) { + for (int j = 0; j < size; j++) { + if (i < j) { + pyramid[i][j] = SPACE; + } else { + pyramid[i][j] = X; + } + } + } + return pyramid; + } + + public void run (){ + int size = 0; + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + try(reader){ + size = Integer.parseInt(reader.readLine()); + } catch (IOException e) { + System.out.println("Some problem with input stream: " + e.getMessage()); + return; + } catch (NumberFormatException e){ + System.out.println("The line you entered is not valid"); + return; + } + + char[][] pyramidArray = getPyramidArray(size); + + for (char[] c : pyramidArray) { + System.out.println(c); + } + } + +} + + + diff --git a/src/main/java/Homework2/Random_Chars_Table/Main.java b/src/main/java/Homework2/Random_Chars_Table/Main.java new file mode 100644 index 00000000..ea513385 --- /dev/null +++ b/src/main/java/Homework2/Random_Chars_Table/Main.java @@ -0,0 +1,11 @@ +package Homework2.Random_Chars_Table; + +import java.io.IOException; + +public class Main { + + public static void main(String[] args) throws IOException { + + new RandomCharsTable().run(); + } +} diff --git a/src/main/java/Homework2/Random_Chars_Table/RandomCharsTable.java b/src/main/java/Homework2/Random_Chars_Table/RandomCharsTable.java new file mode 100644 index 00000000..4cf4f13c --- /dev/null +++ b/src/main/java/Homework2/Random_Chars_Table/RandomCharsTable.java @@ -0,0 +1,84 @@ +package Homework2.Random_Chars_Table; + +import java.util.Scanner; + +public class RandomCharsTable { + int length = 0; + int height = 0; + String input = ""; + + static char getRandomChar(int min, int max) { + max -= min; + char randomCh = (char) ((int) (Math.random() * ++max) + min); + return randomCh; + } + + public static char[][] getRandomCharsTable(int length, int height) { + char[][] randomCharTable = new char[length][height]; + for (int i = 0; i < length; i++) { + for (int j = 0; j < height; j++) { + char ch = getRandomChar(65, 90); + randomCharTable[i][j] = ch; + } + } + return randomCharTable; + } + + private boolean isValid(String input) { + return (input.matches("\\d+\\s\\d+\\sodd") || input.matches("\\d+\\s\\d+\\seven") + && height >= 0 && length >= 0); + } + + public String getResult(String strategy, char[][] rCT) { + StringBuilder buildResult = new StringBuilder(); + buildResult.append(strategy) + .append(" letters -"); + + boolean strategyOdd = strategy.equals("odd"); + + for (int i = 0; i < length; i++) { + for (int j = 0; j < height; j++) { + boolean isOdd = rCT[i][j] % 2 == 1; + + if ((!strategyOdd && !isOdd) || (strategyOdd && isOdd)) { + buildResult.append(' ') + .append(rCT[i][j]); + } + } + } + return buildResult.toString(); + } + + public void run() { + String strategy; + Scanner scanner = new Scanner(System.in); + input = scanner.nextLine(); + + if (!isValid(input)) { + throw new IllegalArgumentException("The line you entered does not fit the pattern"); + } else { + String[] split = input.split("\\s"); + length = Integer.parseInt(split[0]); + height = Integer.parseInt(split[1]); + strategy = split[2]; + } + + StringBuilder buildTable = new StringBuilder(); + char[][] rCT = getRandomCharsTable(length, height); + + for (char[] ch : rCT) { + buildTable.append("| "); + for (char c : ch) { + buildTable.append(c).append(" | "); + } + buildTable.append("\n"); + } + System.out.println(buildTable); + + System.out.println(getResult(strategy, rCT)); + } + +} + + + diff --git a/src/main/java/Homework2/Traffic_Light/Main.java b/src/main/java/Homework2/Traffic_Light/Main.java new file mode 100644 index 00000000..a158d1b2 --- /dev/null +++ b/src/main/java/Homework2/Traffic_Light/Main.java @@ -0,0 +1,8 @@ +package Homework2.Traffic_Light; + +public class Main { + + public static void main(String[] args) { + new TrafficLight().run(); + } +} diff --git a/src/main/java/Homework2/Traffic_Light/TrafficLight.java b/src/main/java/Homework2/Traffic_Light/TrafficLight.java new file mode 100644 index 00000000..84f1455c --- /dev/null +++ b/src/main/java/Homework2/Traffic_Light/TrafficLight.java @@ -0,0 +1,50 @@ +package Homework2.Traffic_Light; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class TrafficLight { + final int END_OF_THE_DAY = 86399; + + String getTrafficLight(int input) { + if (input < 0) { + throw new IllegalArgumentException("Error. You can't enter negative numbers"); + + } else if (input > END_OF_THE_DAY) { + throw new IllegalArgumentException("Error. The day has come to an end"); + } + int lightInterval = input % 60; + String light = ""; + if (lightInterval >= 0 && lightInterval < 35) { + light = "Green"; + } else if (lightInterval >= 35 && lightInterval < 40) { + light = "Yellow"; + } else if (lightInterval >= 40 && lightInterval < 55) { + light = "Red"; + } else if (lightInterval >= 55 && lightInterval < 60) { + light = "Yellow"; + } + return light; + } + + public void run() { + int input = 0; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) { + input = Integer.parseInt(reader.readLine()); + } catch (IOException e) { + e.printStackTrace(); + } catch (NumberFormatException e) { + System.out.println("Input does not contain numbers"); + } + System.out.println(getTrafficLight(input)); + } +} + + + + + + + + diff --git a/src/main/java/Homework3/Immutable_Class_Task/Employee.java b/src/main/java/Homework3/Immutable_Class_Task/Employee.java new file mode 100644 index 00000000..60ea98ad --- /dev/null +++ b/src/main/java/Homework3/Immutable_Class_Task/Employee.java @@ -0,0 +1,53 @@ +package Homework3.Immutable_Class_Task; +import java.util.HashMap; +import java.util.Map; + +public final class Employee { + private final String name; + private final int regNo; + private final Map metadata; + + public Employee(String name, int regNo, + Map metadata) + { + this.name = name; + this.regNo = regNo; + Map tempMap = new HashMap<>(); + for (Map.Entry entry : + metadata.entrySet()) { + tempMap.put(entry.getKey(), entry.getValue()); + } + this.metadata = tempMap; + } + + public String getName() { return new String(this.name); } + + public int getRegNo() { return regNo; } + + public Map getMetadata() + { + Map tempMap = new HashMap<>(); + for (Map.Entry entry : + this.metadata.entrySet()) { + tempMap.put(entry.getKey(), entry.getValue()); + } + return tempMap; + } + } + + + class Main { + public static void main(String[] args) + { + Map map = new HashMap<>(); + map.put("1", "first"); + map.put("2", "second"); + Employee s = new Employee("ABC", 101, map); + System.out.println(s.getName()); + System.out.println(s.getRegNo()); + System.out.println(s.getMetadata()); + + + } + } + diff --git a/src/main/java/Homework4/CustomFileReader/CustomFileReader.java b/src/main/java/Homework4/CustomFileReader/CustomFileReader.java new file mode 100644 index 00000000..190889db --- /dev/null +++ b/src/main/java/Homework4/CustomFileReader/CustomFileReader.java @@ -0,0 +1,34 @@ +package Homework4.CustomFileReader; +/* +реализовать приложение, которое считывает данные из файла, и печатает в консоль, но уже без запятых и точек. +Файл положить в main/resources/custom_file_reader + +в классе должно быть реализовано минимум три рабочих способа (один с помощью NIO) считывания данных из файла. +Соответственно публичные методы run1(), run2(), run3(), ... + */ + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.Scanner; + +public class CustomFileReader { + String separator = File.separator; + String path = "C:"+ separator + "Users" + separator + "Daisy" + separator + "Documents" + separator + + "Epam training"+ separator + "Java_Core_June_2021" + separator +"src" + separator + "main" + separator + + "resources" + separator + "custom_file_reader" + separator + "text.txt"; + String text = ""; + + File file = new File(path); + + public void run1() throws FileNotFoundException { + Scanner scanner = new Scanner(file); + while (scanner.hasNextLine()) { + + String text = scanner.nextLine(); + } + scanner.close(); + System.out.println(text); + } + + +} diff --git a/src/main/java/Homework4/CustomFileReader/Main.java b/src/main/java/Homework4/CustomFileReader/Main.java new file mode 100644 index 00000000..53af8824 --- /dev/null +++ b/src/main/java/Homework4/CustomFileReader/Main.java @@ -0,0 +1,11 @@ +package Homework4.CustomFileReader; + +import java.io.FileNotFoundException; + +public class Main { + public static void main(String[] args) throws FileNotFoundException { + CustomFileReader reader = new CustomFileReader(); + reader.run1(); + + } +} diff --git a/src/test/java/Homework2/Pyramid_Printer/PyramidPrinterTest.java b/src/test/java/Homework2/Pyramid_Printer/PyramidPrinterTest.java new file mode 100644 index 00000000..24e0ffac --- /dev/null +++ b/src/test/java/Homework2/Pyramid_Printer/PyramidPrinterTest.java @@ -0,0 +1,60 @@ +package Homework2.Pyramid_Printer; + +import base.UnitBase; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class PyramidPrinterTest extends UnitBase { + + static PyramidPrinter pyramidPrinter; + + @BeforeAll + static void init() { + pyramidPrinter = new PyramidPrinter(); + } + + @Test + public void testGetPyramidArray5() { + char[][] actual = pyramidPrinter.getPyramidArray(5); + char[][] expected = new char[][]{ + {'x', ' ', ' ', ' ', ' '}, + {'x', 'x', ' ', ' ', ' '}, + {'x', 'x', 'x', ' ', ' '}, + {'x', 'x', 'x', 'x', ' '}, + {'x', 'x', 'x', 'x', 'x'}, + }; + assertArrayEquals(expected, actual); + } + + @Test + public void testGetPyramidArray1() { + char[][] actual = pyramidPrinter.getPyramidArray(1); + char[][] expected = new char[][]{{'x'}}; + } + + @Test + public void testPyramidArrayWithException() { + setInput("qwery"); + assertDoesNotThrow(() -> pyramidPrinter.run()); + } + @Test + public void runWithValidInputTest(){ + setInput("3"); + pyramidPrinter.run(); + printOut(); + + assertEquals("x ", getOutputLines()[0]); + assertEquals("xx ", getOutputLines()[1]); + assertEquals("xxx", getOutputLines()[2]); + + } + @Test + public void runWithInvalidInputTest(){ + setInput("dff"); + assertDoesNotThrow(()-> pyramidPrinter.run()); + } + + +} \ No newline at end of file diff --git a/src/test/java/Homework2/Random_Chars_Table/RandomCharsTableTest.java b/src/test/java/Homework2/Random_Chars_Table/RandomCharsTableTest.java new file mode 100644 index 00000000..5a9ca22d --- /dev/null +++ b/src/test/java/Homework2/Random_Chars_Table/RandomCharsTableTest.java @@ -0,0 +1,79 @@ +package Homework2.Random_Chars_Table; + +import base.UnitBase; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class RandomCharsTableTest extends UnitBase { + static RandomCharsTable randomCharsTable; + static char[][] charTable; + final String checkTableLines = "\\|(\\s\\w\\s\\|){2}\\s"; + + @BeforeAll + public static void init() { + randomCharsTable = new RandomCharsTable(); + randomCharsTable.length = 3; + randomCharsTable.height = 3; + charTable = new char[][]{ + {'A', 'B', 'C'}, + {'D', 'E', 'F'}, + {'G', 'H', 'I'} + }; + } + + @Test + void getEvenResultTest() { + String expectedEven = "even letters - B D F H"; + init(); + String evenResult = randomCharsTable.getResult("even", charTable); + + assertEquals(expectedEven, evenResult); + } + + @Test + void getOddResultTest() { + String expectedOdd = "odd letters - A C E G I"; + init(); + String oddResult = randomCharsTable.getResult("odd", charTable); + + assertEquals(expectedOdd, oddResult); + } + + @Test + void runWithValidOddInputTest() { + setInput("2 2 odd"); + randomCharsTable.run(); + printOut(); + String actualTableRow1 = getOutputLines()[0]; + String actualTableRow2 = getOutputLines()[1]; + String actual = getOutputLines()[3]; + + assertTrue(actualTableRow1.matches(checkTableLines)); + assertTrue(actualTableRow2.matches(checkTableLines)); + assertEquals("odd letters - ", actual.substring(0, 14)); + } + + @Test + void runWithValidEvenInputTest() { + setInput("2 2 even"); + randomCharsTable.run(); + printOut(); + String actualTableRow1 = getOutputLines()[0]; + String actualTableRow2 = getOutputLines()[1]; + String actual = getOutputLines()[3]; + + assertTrue(actualTableRow1.matches(checkTableLines)); + assertTrue(actualTableRow2.matches(checkTableLines)); + assertEquals("even letters - ", actual.substring(0, 15)); + } + + @Test + void runWithInvalidInputTest() { + setInput("sfr"); + + assertThrows(IllegalArgumentException.class, () -> randomCharsTable.run()); + } + +} \ No newline at end of file diff --git a/src/test/java/Homework2/Traffic_Light/TrafficLightTest.java b/src/test/java/Homework2/Traffic_Light/TrafficLightTest.java new file mode 100644 index 00000000..01a2fc78 --- /dev/null +++ b/src/test/java/Homework2/Traffic_Light/TrafficLightTest.java @@ -0,0 +1,66 @@ +package Homework2.Traffic_Light; + +import base.UnitBase; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class TrafficLightTest extends UnitBase { + static TrafficLight trafficLight; + + @BeforeAll + public static void init(){ + trafficLight = new TrafficLight(); + } + + @Test + void getTrafficLightTestZero() { + String color = TrafficLightTest.trafficLight.getTrafficLight(0); + assertEquals("Green", color); + } + + @Test + void getTrafficLigthTest(){ + String color = TrafficLightTest.trafficLight.getTrafficLight(357); + assertEquals("Yellow", color); + } + + @Test + void negativeInputNumberTest(){ + assertThrows(IllegalArgumentException.class, () -> TrafficLightTest.trafficLight.getTrafficLight(-6)); + } + + @Test + void endOfTheDayTest(){ + assertThrows(IllegalArgumentException.class, () -> TrafficLightTest.trafficLight.getTrafficLight(87000)); + } + + @Test + void runTestZero() { + setInput("0"); + TrafficLightTest.trafficLight.run(); + String color = getOutput(); + assertEquals("Green", color); + } + + @Test + void runTest(){ + setInput("357"); + TrafficLightTest.trafficLight.run(); + String color = getOutput(); + assertEquals("Yellow", color); + } + + @Test + void runTestNegative(){ + setInput("-6"); + assertThrows(IllegalArgumentException.class, () -> TrafficLightTest.trafficLight.run()); + } + + @Test + void runTestEndOfTheDay(){ + setInput("87000"); + assertThrows(IllegalArgumentException.class, () -> TrafficLightTest.trafficLight.run()); + } +} \ No newline at end of file