Skip to content
Closed
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
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@ repositories {
}

dependencies {
implementation 'org.jetbrains:annotations:15.0'
implementation 'org.jetbrains:annotations:15.0'
}
112 changes: 112 additions & 0 deletions src/main/java/LetsCount.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
import java.util.HashMap;
import java.util.Scanner;

public class LetsCount {
Scanner scanner = new Scanner(System.in);

int guestCount;

LetsCount(int guestCount) {
this.guestCount = guestCount;
}

private final HashMap<String, Double> productList = new HashMap<>();

String productName;
double price;

// Метод для заведения товаров
public void inputProduct() {
while (true) {
System.out.println("Введите название товара:");
productName = scanner.next();

// Точка прерывания метода на ключевом слове "завершить"
if (productName.equalsIgnoreCase("завершить")) {
break;
}

System.out.println("Введите цену в т.ч. с копейками, формат 'рубли.копейки' [10.45, 11.40]:");
try {
price = scanner.nextDouble();
if (productList.containsKey(productName) && price > 0) { // На случай, если мы уже добавили такой продукт
price = productList.get(productName) + price;
productList.put(productName, price);
System.out.println("Вы успешно добавили товар \"" + productName + "\"");
} else if (price > 0) {
productList.put(productName, price);
System.out.println("Вы успешно добавили товар \"" + productName + "\"");
} else if (price <= 0) {
System.out.println("Товар не может быть с отрицательной или нулевой стоимостью");
}

} catch (Exception nfe) {
System.out.println("Убедитесь, что вы вводите число в формате 00.00 руб. Попробуйте добавить товар еще раз.");
scanner.next(); //очистка сканера
}

System.out.println("Промежуточный итог: " + subTotal() +
" руб. \nДля завершения подсчета просто напишите \"завершить\"");
}
}

// Метод для подсчета промежуточного итога
public double subTotal() {
double sum = 0;
for (double d : productList.values()) {
sum += d;
}
return sum;
}

// Метод для вывода чека в конце
public void finalReceipt() {
int i = 1;
for (String key : productList.keySet()) {
System.out.println("№ " + i + ". " + key + ", " + productList.get(key) + " руб.");
i++;
}
}

// Метод для подсчета долга на душу
public double duePerGuest(double guestCount, double subTotal) {
double d;
d = subTotal / guestCount;
return d;
}

// Метод для определения формы слова "рубль" в зависимости от числа,
// которое передается на входе
public String rubCase(double duePerGuest) {
int i = (int) Math.floor(duePerGuest);
if (i >= 100) { // Для чеков больше 100 руб., для обработки остатков 11, 12, 13 и 14.
switch (i % 100) {
case 11:
case 12:
case 13:
case 14:
return "рублей";
default: // на случай, если остаток деления будет, например, 01, 24 и т.д.
return rubCaseDefault(i);
}
} else if (11 <= i && i <= 14) {
return "рублей";
} else { // Если итоговый чек меньше, чем на 100 руб.
return rubCaseDefault(i);
}
}

// В отдельный метод вынесено определение формы слова "рубль" для случаев по умолчанию.
private String rubCaseDefault(int i) {
switch (i % 10) {
case 1:
return "рубль";
case 2:
case 3:
case 4:
return "рубля";
default:
return "рублей";
}
}
}
49 changes: 44 additions & 5 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,47 @@
public class Main {
import java.util.Scanner;

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

while (true) {
System.out.println("На сколько человек надо разбить счет?");
try {
guestCount = scanner.nextInt();
if (validNumberOfGuests(guestCount)) {
System.out.println("Отлично! Давайте посчитаем. \nДля завершения программы нужно вместо товара ввести \"завершить\"");
break;
} else {
System.out.println("Вас должно быть больше одного, иначе зачем вам это приложение?");
}
} catch (Exception nfe) {
System.out.println("Убедитесь, что вы вводите целое число.");
scanner.next(); // очистка сканера, а не то попадем в бесконечную петлю
//continue;
}
}

// Заводим счетчик, на вход передаем количество гостей.
LetsCount count = new LetsCount(guestCount);

// Заводим продукты
count.inputProduct();

// Когда завели список покупок
System.out.println("Сейчас всё посчитаю. \nДобавленные товары: ");
count.finalReceipt();
System.out.println("ИТОГО: " + count.subTotal() + " " + count.rubCase(count.subTotal()));

double duePerGuest = count.duePerGuest(guestCount, count.subTotal());

System.out.println("Количество человек: " + guestCount + "\nНадо заплатить " +
String.format("%.2f", duePerGuest) + " " +
count.rubCase(duePerGuest) +
" с души.");
}

private static boolean validNumberOfGuests(int i) {
return i > 1;
}
}
}