Создание Автомата с Напитками java

Рейтинг: 0Ответов: 1Опубликовано: 12.01.2023

Всем привет. Помогите исправить. Не могу понять, как прописать чтоб в конце подсчитывало сумму и названия выбранных напитков (Например: Вы заказали 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;
    }


}

Ответы

▲ 0Принят

Ваше задание сформулировано некорректно. Сначала вы должны четко описать бизнесс правила, потом спроектировать решение, а потом приступать к реализации. Вы начали с реализации и поэтому получился совершенно нерациональный избыточный код.

    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;    
}

Не стесняйтесь задавать вопросы, если таковые появятся