Как передать код опций в класс селектора с n опциями?JAVA

Программисты JAVA общаются здесь
Anonymous
Как передать код опций в класс селектора с n опциями?

Сообщение Anonymous »


package lanta.utils;

import java.util.HashMap;
import java.util.Scanner;

public class MenuConstructor {
public HashMap options;
public int option;
public MenuConstructor(String defaultOption,String... options) {
this.options = new HashMap();
this.options.put(0, defaultOption);
this.option = 1;
for (String option : options) {
this.options.put(this.option, option);
this.option++;
}
}
public MenuConstructor(HashMap options) {
this.options = options;
}

public int getOption(Scanner scanner) {
StringBuilder message = new StringBuilder();
message.append(0 + " - ").append(this.options.get(0));
for(int i = 1; i < this.options.size(); i++){
message.append(" | ").append(i).append(" - ").append(this.options.get(i));
}
System.out.println(message);
System.out.println("Select an option:");
String selection = scanner.nextLine().replaceAll("\\D.*", "");
try {
int selectedOption = Integer.parseInt(selection);
if(options.containsKey(selectedOption)) return selectedOption;
else {
System.out.println("Invalid option, defaulting to 0");
return 0;
}
} catch (NumberFormatException e) {
System.out.println("Invalid number format, defaulting to 0");
return 0;
}
}
}

Вот как код реализован в настоящее время, и вы должны вызвать .getOption(scanner); внутри переключателя, который содержит код для каждого параметра. Мой главный вопрос заключается в том, как я могу «перенести вариант переключателя в метод». Я подумал о нескольких вещах, например, об абстрактном методе, который вы переопределяете при вызове, но все еще есть проблема, заключающаяся в том, что это должен быть случай переключения...

Есть ли способ переопределить каждый параметр? Я смотрю на проблему неправильно?
Пример пользователя (с общей идеей, но, вероятно, неточный для конечного результата):
Scanner scanner = new Scanner(System.in);
MenuConstructor menu = new MenuConstructor("Exit", "Say hello world", "Create a student");
menu.addOption(){ // this for user input 0
return -1; // code for breaking the loop maybe?
}
menu.addOption(){ // this for user input 1
System.out.println("Hello world");
return 0; // default code for continuing maybe?
}
menu.addOption(){
Student sutdent = new Student();
return 0;
}
menu.runMenu(scanner);

Вернуться в «JAVA»