Repository navigation
Задание калькулятор - #1
Plantik1337 wants to merge 3 commits into
Conversation
| System.out.println("Приветствую!\nВведите на скольких человек необходимо разделить счёт:\n"); | ||
| int atm = 0; | ||
| while(atm <= 1) { | ||
| atm = scanner.nextInt();// amt - сокращение от amount (количество). Узнаём у пользователя количество людей. |
There was a problem hiding this comment.
⚠ Пользователь может ввести на вопрос про количество человек вместо чисел строки, и приложение упадет. Лучше такого не допускать, а обрабатывать. Можно использовать методы scanner.hasNextInt()/hasNextFloat() в if else блоке или try-catch
| System.out.println("Введите название товара:\n"); | ||
| name = scanner.next() + " "; | ||
| System.out.println("Введите цену товара:\n"); | ||
| price = scanner.nextDouble(); |
There was a problem hiding this comment.
⚠ Пользователь может ввести на вопрос про стоимость товара вместо чисел строки, и приложение упадет. Лучше такого не допускать, а обрабатывать. Можно использовать методы scanner.hasNextInt()/hasNextFloat() в if else блоке или try-catch
| int lineEnding = (int)result; | ||
| lineEnding = lineEnding%10; | ||
| switch (lineEnding){ | ||
| case 1: | ||
| System.out.println("Счёт разделяется по " + result + " рубль на человека."); | ||
| break; | ||
| case 2: | ||
| case 3: | ||
| case 4: | ||
| System.out.println("Счёт разделяется по " + result +" рубля на человека."); | ||
| break; | ||
| default: | ||
| System.out.println("Счёт разделяется по " + result +" рублей на человека."); |
There was a problem hiding this comment.
⚠ Здесь неправильно рассчитывается окончание слова "рубль", т.е. если будет результат 114, то будет выведено 114,00 рубля. Выводить слово рубль с правильным окончанием в зависимости от суммы - для правильной обработки окончания нужно учесть округленное в меньшую сторону значение без дробной части, и на что оно оканчивается: 1 - "рубль", 2-4 - "рубля", 5-9 (и 0) - "рублей". Плюс учесть, что для чисел 11-19 - "рублей" - для этого стоит проверять, что <число> % 100 между 11 и 19 включительно находится
🍏 Ниже есть участки, где данный код дублируется. Лучше избегать такого, иначе код разрастется и будет сложно в нем ориентироваться. Например, функциональность расчета окончания вывести в какую-то одну функцию и использовать её там, где нужно. Пусть функция возвращает только рассчитанное значение в виде, например, 114,00 рублей, без использования System.out.println() внутри функции. Возвращенный результат уже применяешь в System.out.println()
| public static class Сalc{// Класс калькулятор | ||
| double price = 0; |
There was a problem hiding this comment.
Я тебе рекомендую вынести этот класс за пределы класса Main, т.е. должно быть так:
public class Main {
////
}
public class Calc {
////
}
| if ((lign % 10 == 1) && !(lign % 100 > 10 && lign % 100 < 20)) {// 1 кроме от 10 до 20 Рубль | ||
| return " Рубль"; | ||
| } else if ((lign % 10 >= 2 && lign % 10 < 5) && !(lign % 100 > 10 && lign % 100 < 20)) {// 2 - 4 кроме от 10 до 20 Рубля | ||
| return " Рубля"; | ||
| } else if ((lign % 10 >= 5 && lign % 10 < 10) && !(lign % 100 > 10 && lign % 100 < 20)) {// 5 - 9 кроме от 10 до 20 Рублей | ||
| return " Рублей"; | ||
| } else if (lign % 100 >= 10 && lign % 100 <= 20) {// 10 - 19 исключение | ||
| return " Рублей"; | ||
| } | ||
| return " Рубль"; |
There was a problem hiding this comment.
Молодец! Расчет теперь выполняется правильно и нет дублирования этой функциональности в коде 👍
🍏 Изначальный вариант с switch case был хорошим вариантом и его можно было использовать здесь для вычисления (lign % 10). Для чисел в диапазоне 11..19, например, можно добавить в самом начале функции проверку остатка от (lign % 100) на соответствие этому диапазону - если проверка проходит, то сразу возвращать " Рублей", завершив проверку; если проверка не прошла, то далее будет проверятся остаток от 10 в switch.
🍏 Рекомендую входной аргумент double lign округлить до целочисленного (без дробной части) прежде, чем использовать в проверках, для корректности вычисления. Например, так int num = (int) Math.floor(lign);
No description provided.