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
48 changes: 48 additions & 0 deletions src/main/java/Calculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
public class Calculator {
private final int sumGuests;
private double totalPrice;
public String list = "";

public Calculator(int sumGuests) {

this.sumGuests = sumGuests;

}

public void add(Product p) {
totalPrice += p.price;

list += p.productName + "\n";
}

public String getResult() {
var part = totalPrice / sumGuests;
//Чтобы округлить дробное число только до двух чисел после запятой, можно использовать строковый шаблон: String.format("%.2f", double);.
var r = String.format("%.2f", part);

//Чтобы поставить правильное окончание, вы можете округлить дробное значение и вывести слово "рубль" в правильном падеже. Для округления дробного числа в меньшую сторону можно использовать метод floor() класса Math.
var rub = Math.floor(part);

var suffix = getSuffix(rub);

return r + " рубл" + suffix;
}

public static String getSuffix(double rub) {
// 0,5 - 20 ей
// 1:ь
// 2,3,4я
if (rub % 100 >= 11 && rub%100 <= 14){
return "ей";
}
else if (rub % 10 == 1) {
return "ь";
} else if (rub % 10 == 2 || rub % 10 == 3 || rub % 10 == 4) {
return "я";
} else {
return "ей";
}

}

}
99 changes: 97 additions & 2 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,101 @@
import java.sql.SQLOutput;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");

//1. После запуска программа должна спрашивать у пользователя, на скольких человек необходимо разделить счёт.
System.out.println("Привет! На сколько человек мне разделить счет?");
//2. Программа должна выводить сообщение об ошибке, когда:
//- Количество человек, введённых пользователем, равно 1. В этом случае нет смысла ничего считать и делить.
Scanner scanner = new Scanner(System.in);
int sumGuests = 0;

while (true) {
try {
sumGuests = scanner.nextInt();
} catch (InputMismatchException ex) {
System.out.println("Введите число!");
} finally {
scanner.nextLine();
}
//- Количество человек меньше 1. Это некорректное значение для подсчёта.
if (sumGuests > 1) {
System.out.println("Вас " + sumGuests + " человека? Класс, тогда давайте поделим счет!");
break;
}
if (sumGuests == 1) {
System.out.println("Вы один? Жаль, но к сожалению тут делить нечего, кроме слез одиночества;) ");
}
//Если значение некорректное, то показать ошибку и заново попросить пользователя ввести корректное количество гостей.
if (sumGuests <= 0) {
System.out.println("Ой, кажется вы ошиблись;)! Введите от 2х человек и мы попробуем снова!");
}
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.

Такие отдельные логические блоки, как этот (ввод и обработка количества людей), а также логические блоки с вводом товаров и выводом результатов лучше выносить в отдельные методы и затем вызывать их там, где необходимо. Это позволяет улучшить читаемость кода, т.к. разнородная логика не смешивается в один сплошной код, а также упрощает поддержку кода.

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.

Понял, поправлю и буду обращать внимание.


}
//System.out.println("Давайте попробуем снова: ");
var c = new Calculator(sumGuests);
while (true) {
//Запросите у пользователя название товара и его стоимость. Стоимость должна быть в формате рубли.копейки, например 10.45 или 11.40.
String productName;
System.out.println("Какой у вас товар?");
productName = scanner.nextLine();
System.out.println("Напишите стоимость продукта: ");
double price = inputPrice(scanner);

//Полученный товар должен быть добавлен в калькулятор.
var p = new Product(productName, price);
c.add(p);
//При добавлении товара в калькулятор нужно считать текущую общую сумму всех товаров.
//Калькулятор должен запоминать названия всех добавленных товаров, чтобы выводить все товары, которые были в него добавлены.
//После добавления товара в калькулятор нужно показать пользователю сообщение об успешном добавлении товара.
System.out.println("Товар успешно добавлен!\nМожет еще по одной;)");
//После добавления товара нужно спрашивать у пользователя, хочет ли он добавить ещё один товар.
//Пользователь должен ввести команду "Завершить" для того, чтоб завершить процесс добавления товаров.
//Введение любого другого символа или слова должно запрашивать у пользователя следующий товар до тех пор, пока пользователь не введёт команду "Завершить" после добавления товара.
//Пользователь может ввести команду "Завершить" в любом регистре (завершить, ЗАВЕРШИТЬ, заВЕрШиТь и пр.), и это должно завершать процесс добавления товара.

var input = scanner.nextLine();

if (input.equalsIgnoreCase("завершить")) {
break;

}
}
//После того как пользователь введёт команду "Завершить" после добавления товаров, нужно показать пользователю все добавленные товары и посчитать, сколько должен заплатить каждый человек.
//Каждый новый добавленный товар должен быть выведен с новой строки после текста: "Добавленные товары:". Вы можете использовать символ \n в строке, чтобы указать компилятору,
// что нужно сделать в этом месте переноса строки.
System.out.println("Добавленные товары: ");
System.out.println(c.list);
//Вывод суммы, которую должен заплатить каждый человек, должен быть в формате "10.45". Дробная часть не должна содержать больше двух чисел после запятой.
//Сумма считается в рублях. Ваша задача — обработать правильный вывод. Если сумма 1.45, то вы должны вывести "1.45 рубль", а если сумма будет 3.20 или 4.00, вы
// должны вывести 3.20 рубля или 4.00 рубля. Окончания в слове "рубль" должны зависеть от целочисленной части.
System.out.println(c.getResult());
}


private static double inputPrice(Scanner scanner) {
while (true) {
try {
var r = scanner.nextDouble();
if (r <= 0) {
System.out.println("Цена должна быть положительной!");
continue;
}
return r;
} catch (InputMismatchException ext) {
System.out.println("Введите число!");
} finally {
scanner.nextLine();
}

}

}
}
}




13 changes: 13 additions & 0 deletions src/main/java/Product.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import java.util.Scanner;

public class Product {
public final String productName;
public final double price;


public Product(String productName, double price) {

this.productName = productName;
this.price = price;
}
}