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.println(); 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()); } System.out.print("Selection: "); Scanner sc = new Scanner(System.in); var line = sc.nextLine(); try { int i = Integer.parseInt(line); menuOptions.get(i).onAction(); } catch (ArrayIndexOutOfBoundsException ex) { System.err.printf("Invalid option \"%s\"\n", line); present(); } } }