Предложения для лучшего решения, выбирая пункт из списка

Я хочу перечислить элементы (каждый элемент имеет значение, которое служит для удовлетворения голода) с номерами в консоли, чтобы пользователь мог выбрать элемент, введя номер этого элемента.

  1. HotDog 3
  2. CupCake 2

Я создал класс Food с HashMap из всех продуктов и ценностей. В другом классе (OhterClass) я хочу перечислить элементы и значения и обработать пользовательский ввод. Моя цель - зачитать ценность выбранного элемента и добавить его в поле данных: голод.

Когда я делаю это таким образом, мне нужно создать foreach в OtherClass и прочитать каждый элемент и vlue с индексом, а также я должен проверить ввод пользователя с помощью регистра переключателя, но я думаю, что это решение не очень хорошее, но я понятия не имею, как я могу решить это по-другому.

У кого-нибудь есть предложения для меня?

2 ответа

Решение

Вы можете попробовать это:

public class Hunger {

    public static void main(String[] args) {
        for (Food food : Food.values()) {
            System.out.printf("%d   %-8s %d\n", food.ordinal(), food.caption, food.sustenance);
        }
        System.out.print("Hungry? Make your choice: ");
        Scanner scanner = new Scanner(System.in);
        Food food;
        while (true) {
            try {
                food = Food.values()[scanner.nextInt() - 1];
                break;
            } catch (Exception e) {
                System.out.println("Naa ... choose again: ");
            }
        }
        System.out.printf("This %s was yummy!\n", food.caption);
    }
}

enum Food {

    HOT_DOG("Hot Dog", 3),

    CUP_CAKE("Cup Cake", 2);

    final String caption;
    final int sustenance;

    private Food(String caption, int sustenance) {
        this.caption = caption;
        this.sustenance = sustenance;
    }
}

Попробуйте реализовать шаблон посетителя для вашего решения.

Это будет выглядеть примерно так:

public interface FoodVisitor {
    void visit(FoodType food);
}

public interface FoodType {
    void accept(FoodVisitor visitor);
    String getName();
}

public class HotDog implements FoodType {
    public void accept(FoodVisitor visitor) {
        visitor.visit(this);
    }

    public String getName() {
        return "Hot Dog";
    }
}

public class FoodVisitorImpl implements FoodVisitor {
    public void visit(FoodType food) {
        System.out.println("Enter the amount of " + food.getName() + " you would like");
        Scanner in= ....
        //Get the amount, save it in a field in the visitor
    }
}

public class Demo {
    public static void main(String ... args) {
        FoodVisitorImpl visitor= new FoodVisitorImpl();
        for (FoodType food : foodList) {
            food.accept(visitor);
        }

        //also, implement a certain getResult() method in the visitor
        System.out.println(visitor.getResult());
    }
}
Другие вопросы по тегам