From f193d9f91d9d11e44cf3f546dab918cc23dc88ac Mon Sep 17 00:00:00 2001 From: Andlek Date: Sun, 20 Aug 2023 18:34:12 +0400 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20=D1=86=D0=B5=D0=BD=D1=83=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=81=D1=8C=D1=8E,=20=D0=BD=D0=BE=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82=20=D0=BA=D0=BE=D1=80?= =?UTF-8?q?=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=20=D1=82=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=BA=D0=BE=20=D0=B4=D0=BE=20100,=20=D0=BE=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D0=BD=D0=B5=20=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D1=82=D1=8C,=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../otus/java/example04/task/Example04.java | 38 ---- .../ru/otus/java/example04/task/Person.java | 9 - .../java/example04/task/PriceInWords.java | 164 ++++++++++++++++++ .../main/java/ru/otus/game/DiceImplTest.java | 13 ++ 4 files changed, 177 insertions(+), 47 deletions(-) delete mode 100644 L15-code_parsing2/ru/otus/java/example04/task/Example04.java delete mode 100644 L15-code_parsing2/ru/otus/java/example04/task/Person.java create mode 100644 L15-code_parsing2/ru/otus/java/example04/task/PriceInWords.java create mode 100644 L18-testingOrigins/homework/src/main/java/ru/otus/game/DiceImplTest.java diff --git a/L15-code_parsing2/ru/otus/java/example04/task/Example04.java b/L15-code_parsing2/ru/otus/java/example04/task/Example04.java deleted file mode 100644 index af10205..0000000 --- a/L15-code_parsing2/ru/otus/java/example04/task/Example04.java +++ /dev/null @@ -1,38 +0,0 @@ -package ru.otus.java.example04.task; - -import java.util.*; - -public class Example04 { - public static void main(String[] args) { - // У программиста была задача создать коллекцию - // с уникальными объектами Person - // Также в постановке задачи было указано, - // что будет выполняться частая операция contains - - LinkedList people = new LinkedList<>(); - - fillList(people); - - System.out.print("Contains person2: "); - System.out.println(people.contains(new Person("person2"))); - - // Все ли работает правильно? - // Как улучшить, исправить? - - print(people); - } - - private static void fillList(LinkedList personsUniqueList) { - Person person1 = new Person("person1"); - personsUniqueList.add(person1); - personsUniqueList.add(person1); - Person person2 = new Person("person2"); - personsUniqueList.add(person2); - } - - private static void print(LinkedList persons) { - for(Person person : persons){ - System.out.println(person.name); - } - } -} \ No newline at end of file diff --git a/L15-code_parsing2/ru/otus/java/example04/task/Person.java b/L15-code_parsing2/ru/otus/java/example04/task/Person.java deleted file mode 100644 index efe3f21..0000000 --- a/L15-code_parsing2/ru/otus/java/example04/task/Person.java +++ /dev/null @@ -1,9 +0,0 @@ -package ru.otus.java.example04.task; - -public class Person { - String name; // На то, что не private не обращать внимания - - public Person(String name) { - this.name = name; - } -} diff --git a/L15-code_parsing2/ru/otus/java/example04/task/PriceInWords.java b/L15-code_parsing2/ru/otus/java/example04/task/PriceInWords.java new file mode 100644 index 0000000..e1e7b69 --- /dev/null +++ b/L15-code_parsing2/ru/otus/java/example04/task/PriceInWords.java @@ -0,0 +1,164 @@ +import java.util.Scanner; + +public class PriceInWords { + private static final String[] units = { + "", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", + "десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", + "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать" + }; + + private static final String[] tens = { + "", "", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", + "восемьдесят", "девяносто" + }; + + static String convertToWords(int number) { + if (number == 0) { + return "ноль"; + } + + if (number < 0) { + return "минус " + convertToWords(Math.abs(number)); + } + + String words = " "; + + if (number / 1000000 > 0) { + words += convertToWords(number / 1000000) + " миллион "; + number %= 1000000; + } + + if (number / 1000 > 0) { + words += convertToWords(number / 1000) + " тысяча "; + number %= 1000; + } + + if (number / 100 > 0) { + words += units[number / 100] + " сто "; + number %= 100; + } + + if (number > 0) { + if (number < 20) { + words += units[number] + " "; + } else { + words += tens[number / 10] + " "; + number %= 10; + + if (number > 0) { + words += units[number] + " "; + } + } + } + + return words.trim(); + } + + static String getCurrencyWord(int number) { + if (number % 10 == 1 && number % 100 != 11) { + return " рубль"; + } else if ((number % 10 >= 2 && number % 10 <= 4) && (number % 100 < 10 || number % 100 >= 20)) { + return " рубля"; + } else { + return " рублей"; + } + } + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + System.out.print("Введите число: "); + int number = scanner.nextInt(); + + String words = convertToWords(number); + String currencyWord = getCurrencyWord(number); + + if (number >= 100 && number % 100 == 0) { + words = words.replace("сто", "сто"); + } else if (number >= 100 && number % 100 < 20) { + words = words.replace("один сто", "сто"); + } else if (number >= 100 && number % 100 >= 20) { + words = words.replace("один", "одна"); + } + + System.out.println(words + currencyWord); + } +} + +class PriceInWordsTest { + public static void main(String[] args) { + testConvertToWords(); + testGetCurrencyWord(); + testMainLogic(); + } + + private static void testConvertToWords() { + System.out.println("Тест правильности конвертации цифры в пропись"); + + // сам тест, взял рандомные числа + int[] numbers = {0, 5, 11, 25, 123, 1000, 1500, 9999, 12034, 1234567}; + String[] expectedResults = { + "ноль", "пять", "одиннадцать", "двадцать пять", "сто двадцать три", + "одна тысяча", "одна тысяча пятьсот", "девять тысяч девятьсот девяносто девять", + "двенадцать тысяч тридцать четыре", "один миллион двести тридцать четыре тысячи пятьсот шестьдесят семь" + }; + + for (int i = 0; i < numbers.length; i++) { + String result = PriceInWords.convertToWords(numbers[i]); + if (result.equals(expectedResults[i])) { + System.out.println("Тест кейс " + (i + 1) + " пройден успешно"); + } else { + System.out.println("Тест кейс " + (i + 1) + " провален. Должно быть: " + expectedResults[i] + ", Получили: " + result); + } + } + } + + private static void testGetCurrencyWord() { + System.out.println("Проверка склонения слова рубль"); + + // сам тест, 5 тест кейс специально с ошибкой + int[] numbers = {1, 2, 5, 10, 11, 21, 25, 100, 101, 112, 120}; + String[] expectedResults = { + " рубль", " рубля", " рублей", " рублей", " рубль", " рубль", " рублей", " рублей", " рубль", " рублей", " рублей" + }; + + for (int i = 0; i < numbers.length; i++) { + String result = PriceInWords.getCurrencyWord(numbers[i]); + if (result.equals(expectedResults[i])) { + System.out.println("Тест кейс " + (i + 1) + " пройден успешно"); + } else { + System.out.println("Тест кейс " + (i + 1) + " провален. Ожидаем: " + expectedResults[i] + ", Получили: " + result); + } + } + } + + private static void testMainLogic() { + System.out.println("Тест логики метода main"); + + simulateUserInputAndCompare(500, "пятьсот рублей"); + + System.out.println("Тесты завершены успешно"); + } + + private static void simulateUserInputAndCompare(int number, String expectedOutput) { + System.out.println("Имитация пользовательского ввода: " + number); + String words = PriceInWords.convertToWords(number); + String currencyWord = PriceInWords.getCurrencyWord(number); + + if (number >= 100 && number % 100 == 0) { + words = words.replace("сто", "сто"); + } else if (number >= 100 && number % 100 < 20) { + words = words.replace("один сто", "сто"); + } else if (number >= 100 && number % 100 >= 20) { + words = words.replace("один", "одна"); + } + + String expectedResult = words + currencyWord; + + if (expectedResult.equals(expectedOutput)) { + System.out.println("Тест пройден. Вывод: " + expectedOutput); + } else { + System.out.println("Тест провален. Ожидаем: " + expectedOutput + ", Получили: " + expectedResult); + } + } +} \ No newline at end of file diff --git a/L18-testingOrigins/homework/src/main/java/ru/otus/game/DiceImplTest.java b/L18-testingOrigins/homework/src/main/java/ru/otus/game/DiceImplTest.java new file mode 100644 index 0000000..b85eb06 --- /dev/null +++ b/L18-testingOrigins/homework/src/main/java/ru/otus/game/DiceImplTest.java @@ -0,0 +1,13 @@ +package ru.otus; + +public class DiceImplTest { + public static void testRoll() { + Dice dice = new DiceImpl(); + int result = dice.roll(); + if (result >= 1 && result <= 6) { + System.out.println("Test passed: Roll result is within the valid range."); + } else { + System.err.println("Test failed: Roll result is outside the valid range."); + } + } +} From bf287f9fce844fd7d03799d9971686e9ad3796b3 Mon Sep 17 00:00:00 2001 From: Andlek <35874460+Andlek@users.noreply.github.com> Date: Sun, 20 Aug 2023 18:41:03 +0400 Subject: [PATCH 2/2] Delete DiceImplTest.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Лишнее удалил --- .../src/main/java/ru/otus/game/DiceImplTest.java | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 L18-testingOrigins/homework/src/main/java/ru/otus/game/DiceImplTest.java diff --git a/L18-testingOrigins/homework/src/main/java/ru/otus/game/DiceImplTest.java b/L18-testingOrigins/homework/src/main/java/ru/otus/game/DiceImplTest.java deleted file mode 100644 index b85eb06..0000000 --- a/L18-testingOrigins/homework/src/main/java/ru/otus/game/DiceImplTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.otus; - -public class DiceImplTest { - public static void testRoll() { - Dice dice = new DiceImpl(); - int result = dice.roll(); - if (result >= 1 && result <= 6) { - System.out.println("Test passed: Roll result is within the valid range."); - } else { - System.err.println("Test failed: Roll result is outside the valid range."); - } - } -}