【问题标题】:How to make a menu until user inputs to exit如何在用户输入退出之前制作菜单
【发布时间】:2014-05-16 15:27:53
【问题描述】:

我想循环输入(重复)直到输入 5 退出。比如我输入1个展示柜1,然后再次询问输入,输入4,展示柜4。直到我输入5退出。

下面的代码只是不断询问我的输入,从不显示输出。

public static void main(String[] args){
        System.out.println("1.Soup\n2.Main Course\n3.Dessert\n4.Beverage\n5.Exit");
        //ask input from user
        System.out.println("Enter your choice: ");
        Scanner scan=new Scanner(System.in);
        int input=scan.nextInt();
        int check=input;
        //keep looping until user input 5 which is Exit
        while (input!=5){
             System.out.println("Please enter 1-5\n1.Soup\n2.Main Course\n3.Dessert\n4.Beverage\n5.Exit");
             int input1=scan.nextInt();
             check=input1;
        }
        switch (check){
            case 1 :
                System.out.println("1.Mushroom Soup\n2.Miso Soup\n3.Tomato Soup");
                break;
            case 2 :
                System.out.println("1.Chiken Katsu Don\n2.Curry Katsu Don\n3.Teriyaki Katsu Don\n4.Curry Udon");
                break;
            case 3 :
                System.out.println("1.Matcha Ice Cream\n2.Chocolate Ice Cream\n3.Oreo Chocolate\n4.Dango");
                break;
            case 4 :
                System.out.println( "1.Green Tea\n2.Matcha RedBean\n3.Chocolate MilkShake\n4.Strawberry Ice Blended");
                break;
            case 5 :
                System.exit(0);
               break;
        }
    }
}

【问题讨论】:

    标签: java loops switch-statement


    【解决方案1】:

    switch 应该在while 内。只有在第一个输入被处理后,您才必须询问另一个输入。

    while (input is valid)
        get input
        process input
    

    【讨论】:

      【解决方案2】:

      您的switch 语句超出while-loop 范围。

              while (input!=5)
              {
                  System.out.println("Please enter 1-5\n1.Soup\n2.Main Course\n3.Dessert\n4.Beverage\n5.Exit");
                  int input1=scan.nextInt();
                  check=input1;
                  switch (check)
                  {
                  case 1 :
                      System.out.println("1.Mushroom Soup\n2.Miso Soup\n3.Tomato Soup");
                      break;
                  case 2 :
                      System.out.println("1.Chiken Katsu Don\n2.Curry Katsu Don\n3.Teriyaki Katsu Don\n4.Curry Udon");
                      break;
                  case 3 :
                      System.out.println("1.Matcha Ice Cream\n2.Chocolate Ice Cream\n3.Oreo Chocolate\n4.Dango");
                      break;
                  case 4 :
                      System.out.println( "1.Green Tea\n2.Matcha RedBean\n3.Chocolate MilkShake\n4.Strawberry Ice Blended");
                      break;
                  case 5 :
                      System.exit(0);
                     break;
                  }        
             }
      

      编辑:另外,正如其他人在最近的答案中所指出的那样,您的循环条件变量没有在循环内被重置(但这是您提出的问题的附带问题,并且可以说是一个不同的问题)。

      【讨论】:

      • 有趣。以前从未注意到编辑答案会吹走任何预编辑的 cmets。令人着迷。
      • 我不这么认为。也许一个模组进行了清理。
      • 多么奇怪。我没有注意到任何有争议的事情。
      【解决方案3】:

      我会这样修复它:

      do{
          System.out.println("Please enter 1-5\n1.Soup\n2.Main Course\n3.Dessert\n4.Beverage\n5.Exit");
          int input1=scan.nextInt();
          check=input1;
          switch (check){
          case 1 :
              System.out.println("1.Mushroom Soup\n2.Miso Soup\n3.Tomato Soup");
              break;
          case 2 :
              System.out.println("1.Chiken Katsu Don\n2.Curry Katsu Don\n3.Teriyaki Katsu Don\n4.Curry Udon");
              break;
          case 3 :
              System.out.println("1.Matcha Ice Cream\n2.Chocolate Ice Cream\n3.Oreo Chocolate\n4.Dango");
              break;
          case 4 :
              System.out.println( "1.Green Tea\n2.Matcha RedBean\n3.Chocolate MilkShake\n4.Strawberry Ice Blended");
              break;
          case 5 :
              System.exit(0);
              break;
          }
      }
      while (input!=5);
      

      添加一个 Do-While 循环可以保证它至少会显示一次。

      或者你可以简单地

      while (input!=5){
          System.out.println("Please enter 1-5\n1.Soup\n2.Main Course\n3.Dessert\n4.Beverage\n5.Exit");
          int input1=scan.nextInt();
          check=input1;
          switch (check){
          case 1 :
              System.out.println("1.Mushroom Soup\n2.Miso Soup\n3.Tomato Soup");
              break;
          case 2 :
              System.out.println("1.Chiken Katsu Don\n2.Curry Katsu Don\n3.Teriyaki Katsu Don\n4.Curry Udon");
              break;
          case 3 :
              System.out.println("1.Matcha Ice Cream\n2.Chocolate Ice Cream\n3.Oreo Chocolate\n4.Dango");
              break;
          case 4 :
              System.out.println( "1.Green Tea\n2.Matcha RedBean\n3.Chocolate MilkShake\n4.Strawberry Ice Blended");
              break;
          case 5 :
              System.exit(0);
              break;
          }
      }
      

      【讨论】:

        【解决方案4】:

        您需要进行两个修复。首先,将 switch 块移动到 while 循环中。其次,您的 while 循环将永远不会终止,因为您只分配了一次 input

        我只能想象这种混乱的一部分来自于您的代码中有太多变量:inputinput1check...

        在我看来,您的代码可以大大简化。考虑以下替代方案 - 我们可以使用简单的 while(true) 循环,因为您计划在输入 5 时退出 VM:

        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
        
            while (true) {
        
                System.out.println("Please enter 1-5\n1.Soup\n2.Main Course\n3.Dessert\n4.Beverage\n5.Exit");
        
                int input = scan.nextInt();
        
                switch (input) {
                case 1:
                    System.out.println("1.Mushroom Soup\n2.Miso Soup\n3.Tomato Soup");
                    break;
                case 2:
                    System.out.println("1.Chiken Katsu Don\n2.Curry Katsu Don\n3.Teriyaki Katsu Don\n4.Curry Udon");
                    break;
                case 3:
                    System.out.println("1.Matcha Ice Cream\n2.Chocolate Ice Cream\n3.Oreo Chocolate\n4.Dango");
                    break;
                case 4:
                    System.out.println("1.Green Tea\n2.Matcha RedBean\n3.Chocolate MilkShake\n4.Strawberry Ice Blended");
                    break;
                case 5:
                    System.exit(0);
                    break;
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2014-12-20
          • 2021-02-21
          • 1970-01-01
          • 2012-09-23
          • 1970-01-01
          • 1970-01-01
          • 2016-10-04
          • 1970-01-01
          • 2019-06-20
          相关资源
          最近更新 更多