Создание Автомата с Напитками java
Всем привет. Помогите исправить. Не могу понять, как прописать чтоб в конце подсчитывало сумму и названия выбранных напитков (Например: Вы заказали 5 напитков. Общая стоимость - 200). А так же сканер позволяет вводить только один напиток.
инструменты для использования:
1) enum (напитки)
2) константы (цены)
3) static (общая стоимость)
4) switch (выбор напитка)
Задание:
#1 сделайте enum DrinksMachine, умеющего делать КОФЕ, ЧАЙ, ЛИМОНАД, МОХИТО, МИНЕРАЛКУ, КОКА_КОЛУ;
#2 Сделайте класс Drinks, где константами задайте цену напитку;
#3 Произведите подсчет количества изготовленных напитков и общей суммы, которую должен заплатить клиент;
#4 Сделайте способ приготовления каждого напитка;
#5 Сделайте switch-case оператор, который будет производить напиток (вызывая соответствующий метод) в зависимости от выбора клиента;
#6 Разместите возможность выбора напитка для пользователя и в зависимости от выбора делайте ему напиток;
#7 Пользователь должен иметь возможность заказать несколько напитков
#8 И наконец клиент должен увидеть, сколько денег он должен заплатить;
Мое Решение:
Вот enum:
COFFEE("Кофе"),
TEA("Чай"),
LEMONADE("Лимонад"),
MOJITO("Мохито"),
MINERAL("Минералка"),
COLA("Кока-кола");
private String title;
DrinksMachine(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
}
Вот клас Drinks:
public class Drinks {
final double coffee = 19.99;
final double tea = 11.99;
final double lemonade = 15.00;
final double mojito = 29.50;
final double mineral = 9.99;
final double cola = 10.00;
public double getCoffee() {
return coffee;
}
public double getTea() {
return tea;
}
public double getLemonade() {
return lemonade;
}
public double getMojito() {
return mojito;
}
public double getMineral() {
return mineral;
}
public double getCola() {
return cola;
}
}
public class Drinks {
final double coffee = 19.99;
final double tea = 11.99;
final double lemonade = 15.00;
final double mojito = 29.50;
final double mineral = 9.99;
final double cola = 10.00;
public double getCoffee() {
return coffee;
}
public double getTea() {
return tea;
}
public double getLemonade() {
return lemonade;
}
public double getMojito() {
return mojito;
}
public double getMineral() {
return mineral;
}
public double getCola() {
return cola;
}
}
public class Drinks {
final double coffee = 19.99;
final double tea = 11.99;
final double lemonade = 15.00;
final double mojito = 29.50;
final double mineral = 9.99;
final double cola = 10.00;
public double getCoffee() {
return coffee;
}
public double getTea() {
return tea;
}
public double getLemonade() {
return lemonade;
}
public double getMojito() {
return mojito;
}
public double getMineral() {
return mineral;
}
public double getCola() {
return cola;
}
}
Вот main:
public class Main {
public static void main(String[] args) {
runApp();
System.out.println("Колличество напитков: " + DrinkPreparing.getCounter());
}
public static void runApp() {
Scanner scanner = new Scanner(System.in);
DrinksMachine[] drinkTypes = DrinksMachine.values();
DrinksMachine userDrinkType = null;
System.out.println("count license: " + DrinkPreparing.getCounter());
while (true) {
System.out.println("Please enter drink type from list: " + Arrays.toString(drinkTypes));
String userValue = scanner.nextLine();
userValue = userValue.toUpperCase();
for (DrinksMachine drinkType : drinkTypes) {
if (drinkType.toString().equals(userValue)) {
userDrinkType = DrinksMachine.valueOf(userValue);
break;
}
}
if (userDrinkType != null) {
break;
}
}
switch (userDrinkType) {
case COFFEE: {
new DrinkPreparing();
System.out.println("Возьмите Ваш " + DrinksMachine.COFFEE.getTitle());
System.out.println("Стоимость: ");
}
case TEA: {
new DrinkPreparing();
System.out.println("Возьмите Ваш " + DrinksMachine.TEA.getTitle());
break;
}
case LEMONADE: {
new DrinkPreparing();
System.out.println("Возьмите Ваш " + DrinksMachine.LEMONADE.getTitle());
break;
}
case MOJITO: {
new DrinkPreparing();
System.out.println("Возьмите Ваш " + DrinksMachine.MOJITO.getTitle());
break;
}
case MINERAL: {
new DrinkPreparing();
System.out.println("Возьмите Ваш " + DrinksMachine.MINERAL.getTitle());
System.out.println("Стоимость: ");
break;
}
case COLA: {
new DrinkPreparing();
System.out.println("Возьмите Ваш " + DrinksMachine.COLA.getTitle());
System.out.println("Стоимость: ");
break;
}
}
}
}
Счетчик:
public class DrinkPreparing {
private static int counter;
public DrinkPreparing() {
counter++;
}
public static int getCounter() {
return counter;
}
}
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
Ваше задание сформулировано некорректно. Сначала вы должны четко описать бизнесс правила, потом спроектировать решение, а потом приступать к реализации. Вы начали с реализации и поэтому получился совершенно нерациональный избыточный код.
public class Main {
public static void main(String[] args) {
while (true) {
System.out.println("Здравствуйте! Сделайте свой заказ.");
DrinksMachine drinksMachine = new DrinksMachine();
drinksMachine.start();
drinksMachine.process();
System.out.println("До свидания!");
}
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class DrinksMachine {
private double totalCost = 0.0;
private List<Drink> drinks = new ArrayList<>();
public void start() {
Scanner scanner = new Scanner(System.in);
System.out.println("Пожалуйста, введите название напитка либо нажмите Enter для выполнения заказа : " + Arrays.toString(Drink.values()));
while (true) {
String userInput = scanner.nextLine().trim().toUpperCase();
if (userInput.isEmpty()) break;
try {
Drink drink = Drink.valueOf(userInput);
this.drinks.add(drink);
this.totalCost += drink.getCost();
} catch (java.lang.IllegalArgumentException e) {
System.out.println("Вы ввели некорректное название напитка. попробуйте еще раз.");
}
}
}
public void process() {
for (Drink drink : drinks) {
System.out.println("Возьмите Ваш " + drink.getTitle());
System.out.println("Стоимость: " + drink.getCost());
}
System.out.println("Колличество напитков: " + this.drinks.size());
System.out.println("Общая стоимость : " + this.totalCost);
}
public double getTotalCost() {
return totalCost;
}
public List<Drink> getDrinks() {
return drinks;
}
}
public enum Drink {
COFFEE("Кофе", DrinkCost.COFFEE),
TEA("Чай", DrinkCost.TEA),
LEMONADE("Лимонад", DrinkCost.LEMONADE),
MOJITO("Мохито", DrinkCost.MOJITO),
MINERAL("Минералка", DrinkCost.MINERAL),
COLA("Кока-кола", DrinkCost.COLA);
private final String title;
private final double cost;
private Drink(String title, double cost) {
this.title = title;
this.cost = cost;
}
public String getTitle() {
return title;
}
public double getCost() {
return cost;
}
}
public class DrinkCost {
public final static double COFFEE = 19.99;
public final static double TEA = 11.99;
public final static double LEMONADE = 15.00;
public final static double MOJITO = 29.50;
public final static double MINERAL = 9.99;
public final static double COLA = 10.00;
}
Не стесняйтесь задавать вопросы, если таковые появятся