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