Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions src/main/java/Formater.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
public class Formater {

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 логику вывода результата в консоль и просто отдавать result в качестве результата работы метода.

При таком подходе мы повышаем гибкость нашей программы. Например, если в следующий спринтах при разработке уже Android-приложения нам потребуется функционал форматирования, то мы сможем легко переиспользовать наш класс без внесения изменений формата вывода данных.

Это один из ярких примеров принципа единственной ответственности из принципов SOLID

public static void format(double sum){

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Как и с классом GroceryList, методы format и result можно оставить без static, т.к. эти методы предполагают создание объекта этих классов

String rub;
if(sum % 100 >= 10 && sum % 100 <= 19){
rub = "рублей";
} else if (sum % 10 >= 2 && sum % 10 < 5){
rub = "рубля";
} else if (sum % 10 >= 1 && sum % 10 < 2){
rub = "рубль";
} else {
rub = "рублей";
}
Formater formater = new Formater();
formater.result(sum, 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.

Для вызове функции result нет необходимости создавать еще один объект класса Formater, ее можно вызвать просто через result(sum, rub);

В комментарии c67a4c4#r1114363706 я имел в виду возможность избавить класс Formater от логики вывода данных. Все, что возвращал бы его метод format - отформатированную строку

А в месте вызова данного метода уже бы обрабатывалась логика вывода данных


}
public static void result(double sum, String rub){
String result = String.format("%.2f",sum);
System.out.println("Сумма с каждого = " + result + " " + rub);
}
}
59 changes: 59 additions & 0 deletions src/main/java/GroceryList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import java.util.Scanner;

public class GroceryList {
public void product(int people) {
double sum = 0.0;
String products = ("Добавленные товары:");

while (true) {
Scanner priceProduct = 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.

Название priceProduct предполагает, что данная переменная хранит в себе цену продукта. Но на самом деле это лишь сканнер, который может использоваться для считывания разного рода информации и не отнесящейся к цену за продукт

Поэтому предлагаю для данной переменной использовать название просто scanner

System.out.println("Введите название товара");
String name = priceProduct.nextLine();


System.out.println("Введите стоимость товара");


while(true) {
if (!priceProduct.hasNextDouble()) {
System.out.println("Ошибка, введён текст\nВведите числовое значение");
priceProduct.nextLine();
} else {
double price = priceProduct.nextDouble();

if (price < 0) {
System.out.println("Ошибка, отрицательное значение\nВведите положительное значение");
}

if (price >= 0) {
products = products + "\n" + name + " по цене " + price;
sum = sum + price;

System.out.println("Товар успешно добавлен");
break;
}
}
}


System.out.println("Хотите добавить ещё один товар?");

priceProduct.nextLine();
String reply = priceProduct.nextLine();

if (reply.equalsIgnoreCase("Завершить")) {
System.out.println(products);
break;
}

}

System.out.println("Общая сумма товаров = " + sum);
sum = sum / people;
Formater formater = new Formater();
formater.format(sum);

}
}


36 changes: 33 additions & 3 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,38 @@
// dev branch for Y.Practicum
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
// ваш код начнется здесь
// вы не должны ограничиваться только классом Main и можете создавать свои классы по необходимости
System.out.println("Привет Мир");

Scanner scanner = new Scanner(System.in);
System.out.println("На скольких человек поделить счёт?");


while (true) {
if (!scanner.hasNextInt()) {
System.out.println("Ошибка, введён текст\nВведите числовое значение");
scanner.nextLine();
} else {
int people = scanner.nextInt();

if (people == 1) {
System.out.println("Зачем тебе делить свою еду?\nВведите другое количество");
}
if (people < 1) {
System.out.println("А положительных друзей у тебя нет?\nВведите положительное число");
}
if (people > 1) {
System.out.println("Давай считать");
GroceryList groceryList = new GroceryList();
groceryList.product(people);
break;
}


}

}

}
}