Подсчет количества выбранных напитков, суммы их стоимости в зависимости от выбора пользователя и вывод в консоль. JAVA
Только начал учить java. Столкнулся с задачей, где нужно сделать автомат с напитками и в зависимости от выбора пользователя готовить ему напиток, дать возможность выбрать несколько напитков и в конце вывести выбранные пользователем напитки, подсчет количества каждого напитка, цену за каждый напиток и общую стоимость всех напитков. Проблемы у меня возникли в моменте, когда нужно вести подсчет кол-ва выбранного напитка, общей суммы и вывода всего этого на экран. Никак не пойму как реализовать это в коде. Вот что я смог сделать:
- enum с напитками
public enum DrinksAuto {
COFFEE, TEA, LEMONADE, MOJITO, SODA, COCA_COLA
}
- класс с ценами и методы с приготовлением напитков(сделал только 2 для проверки работоспособности кода)
public class Drinks {
public static final int COFFEE_PRICE = 40;
public static final int TEA_PRICE = 30;
public static final int LEMONADE_PRICE = 25;
public static final int MOJITO_PRICE = 25;
public static final int SODA_PRICE = 15;
public static final int COCA_COLA_PRICE = 20;
Scanner sc = new Scanner(System.in);
public int coffeePrepare(){
System.out.println("Чашка кофе стоит: " + COFFEE_PRICE + "₴");
System.out.print("Введите количество чашек кофе: ");
return sc.nextInt();
}
public int teaPrepare(){
System.out.println("Чашка чая стоит: " + TEA_PRICE + "₴");
System.out.print("Введите количество чашек чая: ");
return sc.nextInt();
}
}
- Мain класс где пользователю предлагается выбор напитка и возможность выбрать несколько напитков
import java.util.Arrays;
import java.util.Scanner;
public class DrinksMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Drinks drinks = new Drinks();
boolean a = true;//условие для цикла
while (a) {
System.out.println("Выберите напиток: ");
System.out.println(Arrays.toString(DrinksAuto.values()));//список напитков
String choice = sc.nextLine();
choice = choice.toUpperCase();
DrinksAuto drinksAuto = DrinksAuto.valueOf(choice);//выбор напитка
switch (drinksAuto) {
case COFFEE:
drinks.coffeePrepare();
break;
case TEA:
drinks.teaPrepare();
break;
default:
System.out.println("ERROR");
}
System.out.println("Желаете чего-нибудь еще? ДА/НЕТ");
boolean moreDrinks = true;//условие для цикла
while (moreDrinks) {
String answer = sc.nextLine();
if (answer.equals("НЕТ") || answer.equals("Нет") || answer.equals("нет")) {
moreDrinks = false;
a = false;
} else if (answer.equals("Да") || answer.equals("ДА") || answer.equals("да")) {
moreDrinks = false;
} else {
System.out.println("Ответьте - ДА/НЕТ");
}
}
}
}
}
И на этом ступор. Не понимаю как сделать вывод, например: Ваш заказ: Кофе 4 - цена 160 Чай 1 - цена 30 Итого сумма заказа - 190 Очень долго пытался решить сам, ни к чему не пришел(
Ответы (1 шт):
Все просто:
public enum Drinks {
COFFEE(40), TEA(30), LEMONADE(25), MOJITO(25), SODA(15), COCA_COLA(20);
private final int price;
private Drinks(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
}
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.function.Function;
public class Main {
private final static Scanner SCANNER = new Scanner(System.in);
public static void main(String[] args) {
Map<Drinks, Integer> result = new HashMap<>();
while (true) {
System.out.println("Please choose a drink: ");
System.out.println(Arrays.toString(Drinks.values()));//список напитков
Drinks drink = userInput(Drinks::valueOf);
System.out.println("Your choice : " + drink + "; price : " + drink.getPrice());
Integer drinkNumber = userInput(Integer::valueOf);
System.out.println("Would you like something else? (Y for apply) ?");
if (result.containsKey(drink)) result.put(drink, result.get(drink)+drinkNumber);
else result.put(drink, drinkNumber);
if (!"Y".equalsIgnoreCase(userInput(String::valueOf))) break;
}
System.out.println("***************************************");
int totalPrice = 0;
for (Drinks drink : result.keySet()) {
System.out.println(drink + "(" + result.get(drink) + ") -> " + result.get(drink)*drink.getPrice());
totalPrice+=result.get(drink)*drink.getPrice();
}
System.out.println("TOTAL PRICE : " + totalPrice);
}
private static <T> T userInput(Function<String, T> function) {
while (true) {
try {
return function.apply(SCANNER.nextLine().trim().toUpperCase());
} catch (Exception e) {
System.out.println("Incorrect input! Please try again.");
}
}
}
}