Предложения для лучшего решения, выбирая пункт из списка
Я хочу перечислить элементы (каждый элемент имеет значение, которое служит для удовлетворения голода) с номерами в консоли, чтобы пользователь мог выбрать элемент, введя номер этого элемента.
- HotDog 3
- 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());
}
}