Skip to content

Консольное приложение - #1

Open
ovnazarova wants to merge 4 commits into
mainfrom
dev
Open

ovnazarova wants to merge 4 commits into
mainfrom
dev

Conversation

@ovnazarova

Copy link
Copy Markdown
Owner

No description provided.

}
}

class Good {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍏 В Java принято каждый класс/интерфейс располагать в отдельном файле

String answer = scanner.next();
if (answer.equalsIgnoreCase("завершить")) {break;}
}
System.out.println("Итого добавленные товары");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍏 Вот прямо просится вынести весь код финальной распечатки в отдельный метод или даже класс, чтобы отделить его от остальной логики расчета и взаимодействия с пользователем.

👏 Ты очень круто оформила конечный вывод)

if (answer.equalsIgnoreCase("завершить")) {break;}
}
System.out.println("Итого добавленные товары");
System.out.println("-".repeat(48));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍏 Еще рекомендую использовать для финальной распечатки 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) + "Наименование товара" +

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍏 При использовании "+" для конкатенации строк кажды раз будет создаваться новый объект и расходоваться память. Особенно негативно это может сказаться при создании строк в цикле. Рекомендую использовать для финальной распечатки 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)&&

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍏 Рекомендую в начале выполнения метода рассчитать и сохранить два значения для sum % 10 и sum % 100, чтобы не производить деление по несколько раз

ArrayList<Good> arrayOfGoods = new ArrayList<>();
while (true) {
i++;
while(true) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍏 Вложенные циклы можно вынести в отдельные методы

System.out.println("-".repeat(48));
System.out.println("|" + " ".repeat(8) + "Наименование товара" +
" ".repeat(8) +"|" + " Стоимость|");
System.out.println("|" + "-".repeat(35) + "|" + "-".repeat(10) + "|");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍏 Числа, передаваемые в repeat, выглядят "магическими" - когда тебе понятен смысл числа, но твоим коллегам оно может быть неочевидно. Лучше такого избегать, например, заводя понятные константы. Еще если пользователь введет длинное название, то вся строка съезжает и красота вывода портится. Можно рассчитывать ширину вывода в зависимости от длины введенного пользователем названия. Или обрезать строку названия, если она превышает установленный у тебя максимум символов, и добавлять многоточие.

}
while(true) {
try{
System.out.printf("Введите стоимость товара%d: ", i);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍏 Классно было бы подсветить пользователю, в каком формате можно ввести цену. Например, [руб,коп]

}
arrayOfGoods.add(new Good(name, price));
sum += price;
System.out.print("Товар успешно добавлен в корзину. Желаете продолжить? ");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍏 Круто было бы подсказать пользователю, как он может выйти из сценария

System.out.println("|" + " ".repeat(8) + "Наименование товара" +
" ".repeat(8) +"|" + " Стоимость|");
System.out.println("|" + "-".repeat(35) + "|" + "-".repeat(10) + "|");
for (i = 0; i < arrayOfGoods.size(); i++) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍏 Чтобы не прописывать каждый раз обращение к объекту в 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) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍏 Еще проверь, правильно ли отрабатывают случаи, когда нужно вывести 17 рублей, 19 рублей. От 11 до 20

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants