package design.controller.userinput; import java.util.*; public abstract class Menu { public abstract String getTitle(); public abstract List getMenuOptions(); public void present() { var menuOptions = getMenuOptions(); System.out.printf("-- %s --\n", getTitle().toUpperCase()); for (int i = 0; i < menuOptions.size(); i++) { MenuOption menuOption = menuOptions.get(i); System.out.printf("%s: %s\n", i, menuOption.getName()); } Scanner sc = new Scanner(System.in); var line = sc.nextLine(); var split = line.split(" "); try { int i = Integer.parseInt(split[0]); menuOptions.get(i).onCommand(Arrays.copyOfRange(split, 1, split.length)); } catch (ArrayIndexOutOfBoundsException ex) { System.err.printf("Invalid option \"%s\"\n", line); present(); } } }