break to label作为switch语句中的默认情况,不符合逻辑行为

时间:2014-04-28 19:17:09

标签: java control-flow

首先感谢您的阅读。我也非常清楚如何以我想要的方式让它工作。我只是在尝试而不是获得预期的结果。 当我运行这段代码时,我希望当我输入字母X时,我会被问到 再试一次并重新尝试输入字母B.好吧,我是。然而,程序将突破到开始:标签和进程基于我们在中获得的输入的新值 默认情况。如果我第二次尝试输入字母B,则不会执行任何操作 切换声明。如果您在第二次尝试时输入字母B,程序将打印您输入的B,然后程序将终止。这是为什么?

import java.util.Scanner;
public class Help
{
   public static void main(String[] args)
   {
      Scanner kb = new Scanner(System.in);
      System.out.println("Enter the letter B: ");
      char input = kb.nextLine().charAt(0);
      start:
      switch(input)
      {
         case 'B':
            System.out.println("Nice Work!");
            break;
         default:
            System.out.println("Try again: ");
            input = kb.nextLine().charAt(0);
            System.out.println(input);
            break start;

      }

   }
}

2 个答案:

答案 0 :(得分:2)

标记的break语句用于终止循环或用相应标签标记的switch语句。它没有将控制权转移回标签。你的switch陈述只是应该落到程序的最后。

标记为break的内容只有在嵌套switch语句并且需要break来自内部语句的外部语句时才有用。

有关详细信息,请参阅this

答案 1 :(得分:0)

循环时使用:

import java.util.Scanner;
public class Help
{
   public static void main(String[] args)
   {
      Scanner kb = new Scanner(System.in);
      System.out.println("Enter the letter B: ");
      while(true)
      { 
        char input = kb.nextLine().charAt(0);
        switch(input)
        {
         case 'B':
            System.out.println("Nice Work!");
            break;
         default:
            System.out.println("Try again: ");
        }
      }

   }
}