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
25 changes: 25 additions & 0 deletions src/main/java/BarCalculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import java.util.ArrayList;
import java.util.List;

public class BarCalculator {

private final int numberOfPerson;

private final List<Item> items = new ArrayList<>();

public BarCalculator(int numberOfPerson) {
this.numberOfPerson = numberOfPerson;
}

public void addItem(Item item) {
items.add(item);
}

public List<Item> getItems() {
return List.copyOf(items);
}

public double getMoneyForOnePerson() {
return items.stream().mapToDouble(Item::cost).sum() / numberOfPerson;
}
}
7 changes: 7 additions & 0 deletions src/main/java/Item.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
public record Item(String name, double cost) {

@Override
public String toString() {
return String.format("Товар: %s, стоимость: %.2f", name, cost);
}
}
95 changes: 94 additions & 1 deletion src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,99 @@
import java.util.List;
import java.util.Scanner;

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

Scanner sc = new Scanner(System.in);

int numberOfPerson = getNumberOfPersonFromConsole(sc);

BarCalculator calculator = new BarCalculator(numberOfPerson);

getItemsFromConsole(sc, calculator);

printItems(calculator);

printMoneyForOnePerson(calculator);
}

private static int getNumberOfPersonFromConsole(Scanner sc) {
int numberOfPerson = 0;
while (numberOfPerson <= 1) {
System.out.println("На скольких человек необходимо разделить счёт?");
try {
String next = sc.next();
numberOfPerson = Integer.parseInt(next);
if (numberOfPerson <= 1) {
System.out.println("Введёное число меньше либо равно 1. " +
"Необходимо ввести число больше 1. Повторите ввод.");
}
} catch (RuntimeException exception) {
System.out.println("Вы ввели не число. Повтворите ввод.");

}
}

return numberOfPerson;
}

private static void getItemsFromConsole(Scanner sc, BarCalculator calculator) {
boolean continuing = true;
while (continuing) {
Item item = getItemFromConsole(sc);
calculator.addItem(item);
System.out.println("Вы успешно добавили товар: " + item);
continuing = askIfContinue(sc);
}
}

private static Item getItemFromConsole(Scanner sc) {
System.out.println("Введите название товара:");
String name = sc.next();
double cost = 0;
while (cost <= 0) {
System.out.println("Введите стоимость товара в формате ХХ.ХХ :");
try {
String next = sc.next();
cost = Double.parseDouble(next);
} catch (RuntimeException exception) {
System.out.println("Вы ввели некорректное значение стоимости товара. Повторите ввод.");
}
if (cost <= 0) {
System.out.println("Стоимость товара должна быть больше 0.00. Повторите ввод.");
}
}

return new Item(name, cost);
}

private static boolean askIfContinue(Scanner sc) {
System.out.println("Если хотите закончить добавление товара введите 'Завершить' иначе введите любой символ:");
String s = sc.next();

return !s.equalsIgnoreCase("завершить");
}

private static void printItems(BarCalculator calculator) {
System.out.println("Добавленные товары:");
List<Item> items = calculator.getItems();
items.forEach(System.out::println);
}

private static void printMoneyForOnePerson(BarCalculator calculator) {
System.out.println("Необходимо заплатить каждому:");
System.out.println(getStringMoneyForOnePerson(calculator));
}

private static String getStringMoneyForOnePerson(BarCalculator calculator) {
double moneyForOnePerson = calculator.getMoneyForOnePerson();
double remainderOfFloor = Math.floor(moneyForOnePerson) % 10;
if (remainderOfFloor == 1) {
return String.format("%.2f рубль", moneyForOnePerson);
} else if (remainderOfFloor >= 2 && remainderOfFloor <= 4) {
return String.format("%.2f рубля", moneyForOnePerson);
} else {
return String.format("%.2f рублей", moneyForOnePerson);
}
}
}