Repository navigation
Консольное приложение - #1
ovnazarova wants to merge 4 commits into
Conversation
| } | ||
| } | ||
|
|
||
| class Good { |
There was a problem hiding this comment.
🍏 В Java принято каждый класс/интерфейс располагать в отдельном файле
| String answer = scanner.next(); | ||
| if (answer.equalsIgnoreCase("завершить")) {break;} | ||
| } | ||
| System.out.println("Итого добавленные товары"); |
There was a problem hiding this comment.
🍏 Вот прямо просится вынести весь код финальной распечатки в отдельный метод или даже класс, чтобы отделить его от остальной логики расчета и взаимодействия с пользователем.
👏 Ты очень круто оформила конечный вывод)
| if (answer.equalsIgnoreCase("завершить")) {break;} | ||
| } | ||
| System.out.println("Итого добавленные товары"); | ||
| System.out.println("-".repeat(48)); |
There was a problem hiding this comment.
🍏 Еще рекомендую использовать для финальной распечатки StringBuilder, он оптимальным образом работает со строками. При использовании "+" для конкатенации строк кажды раз будет создаваться новый объект и расходоваться память. Особенно негативно это может сказаться при создании строк в цикле.
Больше про StringBuilder:
https://javarush.com/quests/lectures/questsyntaxpro.level09.lecture06
https://habr.com/ru/articles/260767/
| } | ||
| System.out.println("Итого добавленные товары"); | ||
| System.out.println("-".repeat(48)); | ||
| System.out.println("|" + " ".repeat(8) + "Наименование товара" + |
There was a problem hiding this comment.
🍏 При использовании "+" для конкатенации строк кажды раз будет создаваться новый объект и расходоваться память. Особенно негативно это может сказаться при создании строк в цикле. Рекомендую использовать для финальной распечатки StringBuilder, он оптимальным образом работает со строками.
Больше про StringBuilder:
https://javarush.com/quests/lectures/questsyntaxpro.level09.lecture06
https://habr.com/ru/articles/260767/
| public static String rur (double sum) { | ||
| if (sum % 10 == 1 && sum % 100 != 11) { | ||
| return "рубль"; | ||
| } else if ((sum % 10 == 2 || sum % 10 == 3 || sum % 10 == 4)&& |
There was a problem hiding this comment.
🍏 Рекомендую в начале выполнения метода рассчитать и сохранить два значения для sum % 10 и sum % 100, чтобы не производить деление по несколько раз
| ArrayList<Good> arrayOfGoods = new ArrayList<>(); | ||
| while (true) { | ||
| i++; | ||
| while(true) { |
There was a problem hiding this comment.
🍏 Вложенные циклы можно вынести в отдельные методы
| System.out.println("-".repeat(48)); | ||
| System.out.println("|" + " ".repeat(8) + "Наименование товара" + | ||
| " ".repeat(8) +"|" + " Стоимость|"); | ||
| System.out.println("|" + "-".repeat(35) + "|" + "-".repeat(10) + "|"); |
There was a problem hiding this comment.
🍏 Числа, передаваемые в repeat, выглядят "магическими" - когда тебе понятен смысл числа, но твоим коллегам оно может быть неочевидно. Лучше такого избегать, например, заводя понятные константы. Еще если пользователь введет длинное название, то вся строка съезжает и красота вывода портится. Можно рассчитывать ширину вывода в зависимости от длины введенного пользователем названия. Или обрезать строку названия, если она превышает установленный у тебя максимум символов, и добавлять многоточие.
| } | ||
| while(true) { | ||
| try{ | ||
| System.out.printf("Введите стоимость товара%d: ", i); |
There was a problem hiding this comment.
🍏 Классно было бы подсветить пользователю, в каком формате можно ввести цену. Например, [руб,коп]
| } | ||
| arrayOfGoods.add(new Good(name, price)); | ||
| sum += price; | ||
| System.out.print("Товар успешно добавлен в корзину. Желаете продолжить? "); |
There was a problem hiding this comment.
🍏 Круто было бы подсказать пользователю, как он может выйти из сценария
| System.out.println("|" + " ".repeat(8) + "Наименование товара" + | ||
| " ".repeat(8) +"|" + " Стоимость|"); | ||
| System.out.println("|" + "-".repeat(35) + "|" + "-".repeat(10) + "|"); | ||
| for (i = 0; i < arrayOfGoods.size(); i++) { |
There was a problem hiding this comment.
🍏 Чтобы не прописывать каждый раз обращение к объекту в arrayList через get, используй for-each:
https://javarush.com/groups/posts/for-each-java
| } else if (((int) sum % 10 == 2 || (int) sum % 10 == 3 || (int) sum % 10 == 4)&& | ||
| (int) sum % 100 != 12 && (int) sum % 100 != 13 && (int) sum % 100 != 14) { | ||
| } else if ((sum % 10 == 2 || sum % 10 == 3 || sum % 10 == 4)&& | ||
| sum % 100 != 12 && sum % 100 != 13 && sum % 100 != 14) { |
There was a problem hiding this comment.
🍏 Еще проверь, правильно ли отрабатывают случаи, когда нужно вывести 17 рублей, 19 рублей. От 11 до 20
No description provided.