Repository navigation
Консольное приложение #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,6 +1,115 @@ | ||
| /* | ||
| «Калькулятор счёта» — консольное приложение, | ||
| которое будет задавать вопросы в консоли, | ||
| считывать пользовательский ввод | ||
| и в результате показывать | ||
| список товаров и сумму для каждого из друзей. | ||
| */ | ||
|
|
||
| import java.util.Scanner; | ||
| public class Main { | ||
| private static final Scanner scanner = new Scanner(System.in); | ||
|
|
||
| public static void main(String[] args) { | ||
| System.out.println("Hello world!"); | ||
| /* | ||
| После запуска программа должна спрашивать у пользователя, | ||
| на скольких человек необходимо разделить счёт. | ||
| */ | ||
|
|
||
| int k; | ||
| System.out.println("Укажите, на скольких человек делим счет:"); | ||
| if (scanner.hasNextInt()) { | ||
| k = scanner.nextInt(); | ||
| while (k <= 1) { | ||
| System.out.println("Количество человек должно быть больше 1, укажите другое значение:"); | ||
| if (scanner.hasNextInt()) { | ||
| k = scanner.nextInt(); | ||
| } else { | ||
| System.out.println("Укажите количество целой цифрой, без этого калькулятор не будет работать."); return; | ||
| } | ||
| } | ||
| System.out.println("Замечательно! Количество человек - " + k +"\n\nТеперь укажи товары и их цены. Или напиши 'завершить' для рассчета."); | ||
| } else { | ||
| System.out.println("Укажите количество целой цифрой, без этого калькулятор не будет работать."); return; | ||
| } | ||
|
|
||
|
|
||
| /* | ||
| класс - в итоге вынесла отдельно, тк должен быть класс кроме Main | ||
|
|
||
| class Sku { | ||
| String name; //название товара | ||
| double price; //цена товара | ||
| public static int goodsCount; | ||
|
|
||
| //теперь делаем конструктор для товара | ||
| Sku(String nameSKU, double priceSKU){ | ||
| name = nameSKU; | ||
| price = priceSKU; | ||
| goodsCount++; | ||
| } | ||
| } | ||
| */ | ||
|
|
||
| String end = "завершить"; | ||
| String text = ""; | ||
| Double pr = 0.0; | ||
| String list = ""; | ||
| Double sum = 0.0; | ||
|
|
||
|
|
||
| while (!text.equalsIgnoreCase(end)) { | ||
| System.out.println("Товар, например, 'Тыквенный раф' -"); | ||
| scanner.nextLine(); | ||
| text = scanner.nextLine(); | ||
| if (text.equalsIgnoreCase(end)) {break;} | ||
| list = list + "\n" + text; | ||
| System.out.println(text + " - записали\n"); | ||
|
|
||
| System.out.println("Цена, например, '150,10' - "); | ||
| if (scanner.hasNextDouble()) { | ||
| pr = scanner.nextDouble(); | ||
| while (pr < 0) { | ||
| System.out.println("!! Цена должна быть положительным числом. Укажите новую цену."); | ||
| pr = 0.0; | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. pr = 0.0 - лишнее. В следующей строчке переприсваиваем |
||
| pr = scanner.nextDouble(); | ||
| } | ||
| sum = sum + pr; | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Есть короткая конструкция sum += pr; |
||
| System.out.println(pr + " - ок, посчитали\n"); | ||
| } else { | ||
| System.out.println("!! Укажите цену цифрами, для разделения используй запятую.\nНазвание товара укажи заново.\n"); | ||
| } | ||
| Sku sku = new Sku(text, pr); | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Переменная объявляется и не используется |
||
| } | ||
|
|
||
| if (list.equals("")) { | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Можно заменить на list.isEmpty |
||
| System.out.println("Ничего не заказано"); return; | ||
| } | ||
|
|
||
|
|
||
| System.out.println("\n****\nСписок всех товаров:" + list.substring(0, list.length()) + "\n"); | ||
| System.out.println("Общая сумма: " + sum + " Количество человек: " + k + "\n"); | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Такие подряд идущие println можно объединить в один. |
||
| Double pay = sum / k; | ||
| String payment = String.format("%.2f", pay); | ||
| String rub = ""; | ||
|
|
||
| switch (payment.substring(payment.length()-4,payment.length()-3)) { | ||
| case "1": | ||
| rub = "рубль"; | ||
| break; | ||
| case "2": | ||
| case "3": | ||
| case "4": | ||
| rub = "рубля"; | ||
| break; | ||
| default: | ||
| rub = "рублей"; | ||
| break; | ||
| } | ||
|
|
||
|
|
||
| System.out.println("Сумма на каждого: " + payment + " " + rub + "\n****"); | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Такие отдельные логические блоки, как этот (обработка окончаний), а также логические блоки с с вводом людей, вводом товаров и выводом результатов лучше выносить в отдельные сущности (методы и классы) и затем вызывать их там, где необходимо. Это позволяет улучшить читаемость кода, т.к. разнородная логика не смешивается в один сплошной код, а также упрощает поддержку кода. |
||
|
|
||
|
|
||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| public class Sku { | ||
| String name; //название товара | ||
| double price; // цена товара | ||
| public static int goodsCount; | ||
|
|
||
| //теперь делаем конструктор для товара | ||
| Sku(String nameSKU, double priceSKU){ | ||
| name = nameSKU; | ||
| price = priceSKU; | ||
| goodsCount++; | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Лучше делать наименования более содержательными, эта тема хорошо раскрывается во 2 главе книги Роберта Мартина "Чистый код". Также на хабре есть краткий конспект книги: https://habr.com/ru/post/485118/