Skip to content

Мой первый проект. - #1

Open
Hakkuda wants to merge 2 commits into
mainfrom
dev
Open

Hakkuda wants to merge 2 commits into
mainfrom
dev

Conversation

@Hakkuda

@Hakkuda Hakkuda commented Apr 16, 2024

Copy link
Copy Markdown
Owner

Делитель счёта.

Comment thread src/main/java/Main.java Outdated
Comment on lines +67 to +74
class Product {
String name = "без названия";
double cost = 0.00f;
Product(String name, double cost) {
this.name = name;
this.cost = cost;
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Отлично, что ты организовал логику программы в отдельные классы. Также стоит рассмотреть возможность создания отдельного файла для каждого класса. Это улучшит структуру проекта и облегчит навигацию по коду.

Comment thread src/main/java/Main.java Outdated
Comment on lines +113 to +121
if (remainderOf100 == 11 || remainderOf100 == 12 || remainderOf100 == 13 || remainderOf100 == 14)
return "рублей";
if (remainderOf10 == 1)
return "рубль";
if (remainderOf10 == 2 || remainderOf10 == 3 || remainderOf10 == 4)
return "рубля";
else
return "рублей";
}

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 (remainderOf100 >=11 && remainderOf100 <= 14){
...
}

Comment thread src/main/java/Main.java Outdated
Comment on lines +46 to +49
Scanner scanner = new Scanner(System.in);
String goodName = scanner.nextLine();
System.out.println("Введите стоимость товара:");
scanner = new Scanner(System.in);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Каждый раз, когда ты создаешь новый объект Scanner для считывания ввода пользователя, это приводит к созданию нового потока чтения с клавиатуры System.in. Пересоздание Scanner может привести к проблемам, таким как потеря данных в буфере ввода или непредсказуемое поведение при считывании данных. Кроме того, это может быть неэффективным с точки зрения использования ресурсов, поскольку создание нового объекта Scanner каждый раз потребляет дополнительную память и ресурсы процессора. Вместо этого лучше создать один объект Scanner и использовать его для всего ввода с клавиатуры.

Comment thread src/main/java/Main.java Outdated
Comment on lines +32 to +38
if (numberPeople < 2) {
if (numberPeople == 1)
System.out.println("Количество человек, введённых пользователем, равно 1. Нечего делить. Попробуйте снова:");
else
System.out.println("Некорректное значение для подсчёта. Попробуйте ещё раз:");
} else
return numberPeople;

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() {} else if:

            if (numberPeople == 1) {
                System.out.println("");
            } else if (numberPeople < 1) {
                System.out.println("");
            } else {
                return numberPeople;
            }

Comment thread src/main/java/Main.java Outdated

double payFromEveryPerson = sumCost / numberPeople;
String wordRuble = Formater.getWordRuble(payFromEveryPerson);
System.out.println(String.format("Каждый человек должен заплатить \"%.2f\" %s.", payFromEveryPerson, wordRuble));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Вместо использования функции format, которая создает новую отформатированную строку, можно воспользоваться функцией printf, которая позволяет форматировать вывод напрямую при его осуществлении:

System.out.printf("Каждый человек должен заплатить \"%.2f\" %s.\n", payFromEveryPerson, wordRuble);

Comment thread src/main/java/Main.java Outdated
Comment on lines +68 to +69
String name = "без названия";
double cost = 0.00f;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Здорово, что ты задал объекту Product значения по умолчанию. Однако, в данном случае, конструктор твоего объекта не позволит создать его без инициализации его свойств. Чтобы это исправить, можно создать в классе Product перегруженный конструктор без параметров:

class Product {
    String name = "без названия";
    double cost = 0.00f;

    // Пустой конструктор, который создаст объект с значениями по умолчанию
    Product() {}

    Product(String name, double cost) {
        this.name = name;
        this.cost = cost;
    }
}

Comment thread src/main/java/Main.java
while (true) {
System.out.println("Введите название товара:");
Scanner scanner = new Scanner(System.in);
String goodName = scanner.nextLine();

@IvanGusevE IvanGusevE Apr 17, 2024 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Сейчас приложение позволяет добавить товар с пустым именем или именем, состоящим только из пробелов. Чтобы исправить это, можно использовать функцию isBlank для проверки пустоты строки и trim для удаления начальных и конечных пробелов:

if(goodName.isBlank()){
   /*  повторный ввод  */
}

Product product = new Product(goodName.trim(), goodCost);

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Что делать, если java не видит метод isBlank()?

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