Skip to content

Здравствуйте! - #1

Open
dariaban wants to merge 3 commits into
mainfrom
dev
Open

dariaban wants to merge 3 commits into
mainfrom
dev

Conversation

@dariaban

Copy link
Copy Markdown
Owner

Понимаю, что это ужасно, но учусь программировать с нуля и это все, что я пока могу. Извините:(

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

class Dish {
Scanner scanner = new Scanner(System.in);
Scanner scanner1 = 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. Если при этом программа начинает работать некорректно, проверь, что циклы написаны правильно.

Comment thread src/main/java/Dish.java
import java.util.Scanner;


class Dish {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🍏 Рекомендую класс Dish, в котором будут поля для сохранения названия и цены блюда. А операции со списком блюд вынести в отдельный класс.
Также можно вынести в отдельный класс форматирование вывода (слова "рубль")

Comment thread src/main/java/Dish.java Outdated
Scanner scanner1 = new Scanner(System.in);
public String finish = "Завершить";
public double sumOfDishes;
public String name, check = "проверка";

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/Dish.java Outdated
Scanner scanner = new Scanner(System.in);
Scanner scanner1 = new Scanner(System.in);
public String finish = "Завершить";
public double sumOfDishes;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🍏 Сейчас любое из этих полей можно изменить снаружи класса. Это не очень хорошо, лучше для внутренних переменных использовать модификатор private.
https://javarush.com/groups/posts/1988-modifikatorih-dostupa-private-protected-default-public

Comment thread src/main/java/Dish.java Outdated
class Dish {
Scanner scanner = new Scanner(System.in);
Scanner scanner1 = new Scanner(System.in);
public String finish = "Завершить";

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🍏 Эту строку можно вынести в константу, так как она не будет изменяться на всем протяжении работы программы.
https://www.baeldung.com/java-constants-good-practices

Comment thread src/main/java/Dish.java Outdated
return numberOfPeople;
}
public void peoplescalculator2(){
while (!scanner.hasNextInt()){

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/Dish.java Outdated

return numberOfPeople;
}
public void peoplescalculator2(){

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🍏 Рекомендую давать методам более понятные названия. Со стороны не ясно, в чем может быть разница между peoplescalculator1 и peoplescalculator2.

Comment thread src/main/java/Dish.java Outdated
}

public void result() {
sumPerPerson = sumOfDishes / numberOfPeople;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🍏 Здесь происходит неявное приведение суммы конечного результата к integer, так как производится операция между разными типами чисел (double и integer). Из-за этого в итоге мы получаем результат без копеек

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

public void result() {
sumPerPerson = sumOfDishes / numberOfPeople;
System.out.println("Вы заказали " + "\n" + listOfNAmes + "\n" + ". Общая стоимость стоимость заказа " + sumOfDishes + " " + "Каждый заплатит " + String.format("%.2f", Math.floor(sumPerPerson)) +" "+ "рубля");

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, который сформирует только результирующую строку.
https://habr.com/ru/articles/260767

Comment thread src/main/java/Main.java Outdated
@@ -1,6 +1,26 @@
import java.util.ArrayList;
import java.util.Scanner;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🍏 Остались неиспользуемые импорты, лучше их удалить

@kgornostaeva

Copy link
Copy Markdown

Понимаю, что это ужасно, но учусь программировать с нуля и это все, что я пока могу. Извините:(

Рекомендую никогда не извиняться заранее за свою работу) Все когда-то учились) У тебя хорошая первая попытка!

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


}
class Calculator {

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 принято каждый класс выносить в отдельный файл. В Kotlin это не будет требоваться

Comment thread src/main/java/Dish.java Outdated
}
class Calculator {
Scanner scanner = new Scanner(System.in);
StringBuilder builder = new StringBuilder();

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/Dish.java Outdated
} else {
System.out.println("Делим на " + numberOfPeople + " человек.");
}
} while (numberOfPeople < 1);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ < 2 или <= 1

Comment thread src/main/java/Dish.java Outdated
System.out.println("Введите название блюда");
scanner.next();
while (!scanner.hasNext()) {
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.

🍏 Строку "Что-то пошло не так!" можно вынести в константу, так как она повторяется несколько раз в коде приложения. В этом случае если тебе нужно будет ее немного изменить, например, написать "Ой, что-то пошло не так!", то ты внесешь изменения в одном месте кода, а не вовсех местах использования.

Comment thread src/main/java/Dish.java Outdated
double number = (int) numberOfPeople;

sumPerPerson = sumOfDishes / number;
StringBuilder builder = new StringBuilder("Вы заказали " + "\n" + listOfNAmes + "\n" + "Общая стоимость стоимость заказа " + String.format("%.2f", Math.floor(sumOfDishes)) + " " + formater.formaterSum(sumOfDishes) + "." + " " + "Каждый заплатит " + String.format("%.2f", Math.floor(sumPerPerson)) + " " + formater.formaterSumPerPerson(sumPerPerson) +".");

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)
Попробуй для построения строки использовать методы самого StringBuilder:

StringBuilder builder = new StringBuilder("Вы заказали \n")
builder.append(listOfNAmes)
builder.append("\n")
... ...
 System.out.println(builder);

Больше про методы StringBuilder можно почитать вот здесь с примерами:
https://javarush.com/quests/lectures/questsyntaxpro.level09.lecture06

Comment thread src/main/java/Dish.java Outdated
}
class Formater {
public String format;
public String formaterSum(double sumOfDishes) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🍏 formaterSum делает абсолютно то же самое, что и formaterSumPerPerson. Эти методы имеют одинаковую сигнатуру, принимают одинаковые типы аргументов и возвращают одинаковые типы значений. Достаточно использовать один метод, просто передавать в него разные данные.

Comment thread src/main/java/Dish.java Outdated
public String formaterSum(double sumOfDishes) {
int rub = (int) (sumOfDishes % 10);

switch (rub) {

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 elseIf else, так как здесь всего четыре возможных случая. Нужно проверить, что число входит в один из четырех интервалов:

== 1   рубль
> 1 && <= 4  рубля
>= 5 && <= 9  рублей
==0  рублей

Comment thread src/main/java/Dish.java Outdated
class Formater {
public String format;
public String formaterSum(double sumOfDishes) {
int rub = (int) (sumOfDishes % 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.

⚠️ Эта проверка не покрывает случаев 11 рублей, 12 рублей

Comment thread src/main/java/Main.java Outdated
public class Main {
public static void main(String[] args) {
int numberOfPeople = 0;
Dish dish = new Dish();

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🍏 Здесь dish уже не используется, можно удалить

}

public String askName(String name) {
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.

🍏 Все повторяющиеся строки лучше выносить в константы)

scanner.next();
} else {
sumOfDishes = sumOfDishes + price;
System.out.println("Вы заказали: " + listOfNAmes + " " + price + " на сумму: " + String.format("%.2f",sumOfDishes));

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, чтобы не создавать промежуточных строк

double number = (int) numberOfPeople;

sumPerPerson = sumOfDishes / number;
StringBuilder builder = new StringBuilder("Вы заказали ");

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🍏 Всю работу билдера по формированию результирующей строки можно вынести в отдельный метод, в который будут переданы необходимые параметры

public class Formater {
public String format;

public String formater(double test) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

👏

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