java - 我如何继续实现子菜单? Java 终端菜单

标签 java oop menu java.util.scanner

这是目前的菜单。我想创建子菜单来运送和订购。 我真的不知道如何做到这一点。当我选择船舶选项时,我想要另一个菜单来显示不同的船舶,其中具体有 10 艘。

最好的方法是什么?

提前致谢!

import java.util.Scanner;

public class Main {
boolean exit;

public static void main(String[] args) {
    Main main = new Main();
    main.runMenu();


}

public void runMenu() {
    printHeader();
    while(!exit) {
        printMenu();
        int choice = getInput();
        performAction(choice);
    }
}

private void printHeader() {
    System.out.println("+-----------------------------------+");
    System.out.println("|          Welcome operator!        |");
    System.out.println("+-----------------------------------+");
}

private void printMenu() {
    System.out.println("\nMake your selection");
    System.out.println("1) Ship");
    System.out.println("2) Order");
    System.out.println("3) Map");
    System.out.println("4) Status");
    System.out.println("0) Exit");
}

private int getInput() {
    Scanner kb = new Scanner(System.in);
    int choice = -1;
    while(choice < 0 || choice > 4) {
        try {
            System.out.print("\nEnter your choice");
            choice = Integer.parseInt(kb.nextLine());
        }
        catch (NumberFormatException e) {
            System.out.println("Invalid selection. Please try again");
        }
    }
    return choice;
}

这里我想调用子菜单:

private void performAction(int choice) {
    switch(choice) {
        case 0:
            exit = true;
            System.out.println("Thank your for using our simulator");
            break;
        case 1:
            shipMenu();
            break;
        case 2:
            orderMenu();
            break;
        case 3:
            //map();
        case 4:
            //status();
        default:
            System.out.println("Unknown error has occured");
    }
}

最佳答案

请告诉我这是否不是您想要的。

用户做出选择后,您可以使用清除控制台

new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();

然后打印出下一个子菜单。

例如(此方法可能会变得非常冗长,但它适用于简单的文本菜单):

public static void main(String[] args) {
     while (true) {
     new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
     System.out.println("1. Food");
     System.out.println("2. Drink");
     System.out.println("3. Quit");

     //get user input

      if (userInput == 1) {         //food submenu (submenus can be easily put in functions)
          new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
          System.out.println("1. Apple");
          System.out.println("2. Banana");
          System.out.println("3. Back");

          //get and process input
      } else if (userInput == 2) {         //drink submenu (submenus can be easily put in functions)
          new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
          System.out.println("1. Water");
          System.out.println("2. Juice");
          System.out.println("3. Back");

          //get and process input
      } else break;
    }
  }

关于java - 我如何继续实现子菜单? Java 终端菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59868699/

相关文章:

windows-vista - 为什么有些菜单在光标左侧打开而有些在右侧打开?

jsf - java.lang.ClassCastException:com.sun.faces.facelets.compiler.UIInstructions无法转换为org.primefaces.model.menu.MenuElement

java - 如何运行 ant 任务作为 <taskdef> 的先决条件?

发生 java.lang.IllegalArgumentException

php OOP 类变量与对象变量

PHP OOP 学习曲线 - MySQL 对象失败

Php 类(我认为)

css - 如何删除导航栏切换菜单折叠和标题之间的空间

java - 如何在Java中使用JSpeex

java - 从 arrayList 到 long[]