Skip to content

Conversation

@volkovdimaya
Copy link
Owner

No description provided.

String name;
double cost;

Product(String name , double cost)

Choose a reason for hiding this comment

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

🍏 Классно, что ты создал специальный класс для описания продукта!
Обычно в java при создании кастомного класса, используемого для описания и хранения данных о каком-то объекте, переопределяются методы equals и hashcode. Они важны для сравнения объектов. Подробнее можно почитать, например, здесь:
https://javarush.com/groups/posts/2179-metodih-equals--hashcode-praktika-ispoljhzovanija

@@ -0,0 +1,20 @@
public class FormatterRub {

public String correctEnding(double value)

Choose a reason for hiding this comment

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

⚠️ Для правильной обработки окончания нужно учесть округленное в меньшую сторону значение без дробной части, и на что оно оканчивается: 1 - "рубль", 2-4 - "рубля", 5-9 (и 0) - "рублей". Плюс учесть, что для чисел 11-19 - "рублей" - для этого стоит проверять, что <число> % 100 находится между 11 и 19 включительно.
Текущее решение не подходит, например, для 21, 34 и т.п.


public class Calculator {
double sum;
Scanner scaner = new Scanner(System.in);

Choose a reason for hiding this comment

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

🍏 Поля, которые используются только внутри класса, лучше делать приватными, чтобы их нельзя было изменить снаружи:

Suggested change
Scanner scaner = new Scanner(System.in);
private double sum;
private Scanner scaner = new Scanner(System.in);

ArrayList<Product> products = new ArrayList<>();


private String IputName()

Choose a reason for hiding this comment

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

🍏 В java принято именовать методы в стиле camelCase - с маленькой буквы:

Suggested change
private String IputName()
private String inputName()


public void ShowProducts()
{
FormatterRub f = new FormatterRub();//для форматирования окончания рубля

Choose a reason for hiding this comment

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

🍏 Рекомендую давать переменным развернутые названия, это облегчает чтение кода:

Suggested change
FormatterRub f = new FormatterRub();//для форматирования окончания рубля
FormatterRub formatter = new FormatterRub();

System.out.println("Добавленные товары:");
for (Product product : products)
{
System.out.println("Товар: " + product.name + " цена: " + product.cost + " " + f.correctEnding(product.cost));

Choose a reason for hiding this comment

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

🍏 При печати в памяти будут создаваться промежуточные строки из-за использования оператора "+". Можно использовать StringBuilder, который сформирует только результирующую строку, или String.format.
https://javarush.com/quests/lectures/questmultithreading.level02.lecture06
https://habr.com/ru/articles/260767/

изменены рекомендации
форматирование
изменены рекомендации
форматирование
для Product переопределены equals и hashCode
@volkovdimaya
Copy link
Owner Author

volkovdimaya commented Feb 12, 2024 via email

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.

3 participants