【问题标题】:Java How can I break a while loop under a switch statement?Java如何在switch语句下打破while循环?
【发布时间】:2014-05-14 10:35:22
【问题描述】:

我有一个作业要实现一个简单的测试应用程序,下面是我当前的代码:

import java.util.*;

public class Test{

private static int typing;

public static void main(String argv[]){
    Scanner sc = new Scanner(System.in);
    System.out.println("Testing starts");
    while(sc.hasNextInt()){
        typing = sc.nextInt();
        switch(typing){
            case 0:
              break; //Here I want to break the while loop
            case 1:
              System.out.println("You choosed 1");
              break;
            case 2:
              System.out.println("You choosed 2");
              break;
            default:
              System.out.println("No such choice");
        }
    }
      System.out.println("Test is done");
    }
}

我现在要做的是,当按下0时,表示用户想退出测试,然后我打破while loop并打印Test is done,但它不会那样工作,我知道原因可能是"break"打破了switch,我怎么能让它打破while loop呢?

【问题讨论】:

    标签: java while-loop break


    【解决方案1】:

    如何终止内部菜单?

    示例代码:

    import java.util.Scanner;
    
    public class Example {
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in); //used to get input
            int option1, option2 = 0;
            boolean loop_terminate = true; //flag used to terminate inner while loop
    
            //Main Menu
            while (true) {
                //Main Menu options
                System.out.println("1.Option 1");
                System.out.println("2.Option 2");
                System.out.println("3.Option 3");
                System.out.println("4.Option 4");
                System.out.println("5.Exit main menu");
    
                System.out.print("Please enter your choice : ");
                option1 = input.nextInt();
    
                switch (option1) {
    
                    case 1:
                           //do something here    
                        break;
                    case 2:
                           //do something here 
                        break;
                    case 3:
    
                        while (loop_terminate) {
                            //Inner menu options
                            System.out.println("1.Inner Menu option 1");
                            System.out.println("2.Inner Menu option 2");
                            System.out.println("3.Inner Menu option 3");
                            System.out.println("4.Return to Main Menu");
    
                            System.out.print("Please enter your choice : ");
                            option2 = input.nextInt();
                            switch (option2) {
    
                                case 1:
                                    break;
                                case 2:
                                    break;
                                case 3:
                                    break;
                                case 4:
                                    loop_terminate = false; //this will terminate inner menu
                                    break;
                                default:
                                    System.out.println("Invalid option");
                                    break;
                            }
                        }
                        break; //never forget to add this break statement
                    case 4:
                          break;
                    case 5:
                        return; //terminate outer menu
    
                    default:
                        System.out.println("Invalid option");
                }
            }
    
        } 
    }
    

    【讨论】:

      【解决方案2】:

      将 while 放入函数中,当您按下 0 而不是 break 时,只需 return。例如:

          import java.util.*;
      
      public class Test{
      
      private static int typing;
      
      public static void main(String argv[]){
          Scanner sc = new Scanner(System.in);
          func(sc);
            System.out.println("Test is done");
          }
      }
      
      public static void func(Scanner sc) {
      
      
          System.out.println("Testing starts");
          while(sc.hasNextInt()){
              typing = sc.nextInt();
              switch(typing){
                  case 0:
                    return; //Here I want to break the while loop
                  case 1:
                    System.out.println("You choosed 1");
                    break;
                  case 2:
                    System.out.println("You choosed 2");
                    break;
                  default:
                    System.out.println("No such choice");
              }
          }
      }
      
      }
      

      【讨论】:

        【解决方案3】:

        你可以label你的while循环,breaklabeled loop,应该是这样的:

        loop: while(sc.hasNextInt()){
            typing = sc.nextInt();
            switch(typing){
                case 0:
                  break loop; 
                case 1:
                  System.out.println("You choosed 1");
                  break;
                case 2:
                  System.out.println("You choosed 2");
                  break;
                default:
                  System.out.println("No such choice");
            }
        }
        

        label 可以是任何你想要的词,例如"loop1"

        【讨论】:

        • "loop" 是一个糟糕/无聊的标签选择。更有趣的选择包括“up”、“out”、“stuff”、“theBank”和“dance”。
        • 玩笑不谈,给循环一个信息量更大的标签(在你的情况下,可能是scanner),让中断看起来像break scanner(停止扫描)。
        • @noamtm 这并不明显,所以感谢您指出这一点。
        【解决方案4】:

        您需要一个布尔变量,例如shouldBreak.

            boolean shouldBreak = false;
            switch(typing){
                case 0:
                  shouldBreak = true;
                  break; //Here I want to break the while loop
                case 1:
                  System.out.println("You choosed 1");
                  break;
                case 2:
                  System.out.println("You choosed 2");
                  break;
                default:
                  System.out.println("No such choice");
            }
            if (shouldBreak) break;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-12-20
          • 1970-01-01
          • 2016-02-19
          • 1970-01-01
          • 1970-01-01
          • 2018-09-16
          • 2023-04-10
          相关资源
          最近更新 更多