【问题标题】:Does break in a switch-statement terminates a for-loop?switch 语句中的中断是否会终止 for 循环?
【发布时间】:2020-05-19 09:28:45
【问题描述】:

我试图理解返回、中断和继续。 我知道 break 会停止(内部)for 循环。例如:

for (int i = 1; i <= 3; i++) {
            // inner loop
            for (int j = 1; j <= 3; j++) {
                if (i == 2 && j == 2) {
                    // using break statement inside the inner loop
                    break;
                }
                System.out.println(i + " " + j);
            }
        }

我知道外循环会继续。

我不明白的是这里:

for (int i = 0; i < 3; i++) {
            String line = null;
            switch (a) { 
                case 0:
                    line = "Hello";
                    break;
                case 1:
                    line = "How are you?";
                    break;
                case 2:
                    line = "What are you doing?";
                    break;

所以它转到 case 0,然后中断,for 循环继续,为什么?我认为它会打破循环,因为它没有嵌套。 还是因为 switch 语句 - 它与 if 语句不同?

在这种情况下,它将终止整个 while 循环......我看不出有什么区别。

while(winner == false){

                input = menuInput.nextInt();

                try {
                    if(input == 0 || input >= 9){
                        System.out.println("Ungültige Nummer, versuche nochmal!");
                        break; 
                    }

【问题讨论】:

  • 这种混淆可能是 Java 12 出现这种情况的部分原因,因此您不需要在 switch 表达式中使用 break。见here

标签: java loops for-loop switch-statement break


【解决方案1】:

您可以breakswitch。你不能breakifbreak 应用于可能是breaked 的最接近的语句,所以

for (int j = 1; j <= 3; j++) {
    if (i == 2 && j == 2) {
        // using break statement inside the inner loop
         break;
    }
    System.out.println(i + " " + j);
}

这里的break指的是for

在这里:

for (int i = 0; i < 3; i++) {
    String line = null;
    switch (a) { 
        case 0:
            line = "Hello";
            break;

指的是switch

可以breaked 的语句是forwhiledo...whileswitch

更多信息,您可以查看the spec

【讨论】:

  • 啊,谢谢!有没有办法“打破”一个 if 语句?退货怎么样?
  • 您认为“打破if 声明”会是什么样子?因为我无法想象这样的事情。
  • 哦,是的,这是有道理的。非常感谢。只是认为 switch 和 if 相似,但它们有点不同
  • @Haidepzai 如果你觉得我的回答对你有帮助,你可以accept my answer
【解决方案2】:

break 适用于可以破坏的最里面的东西(没有标签)。在这种情况下,它是 switch - 因为默认的 switch 行为失败了。首先,你的代码。改变,

for (int i = 0; i < 3; i++) {
    String line = null;
    switch (a) { 
        case 0:
            line = "Hello";
            break;
        case 1:
            line = "How are you?";
            break;
        case 2:
            line = "What are you doing?";
            break;

可以改成

loop: for (int i = 0; i < 3; i++) {
    String line = null;
    switch (a) { 
        case 0:
            line = "Hello";
            break loop;
        case 1:
            line = "How are you?";
            break loop;
        case 2:
            line = "What are you doing?";
            break loop;

现在,第二种行为将是失败。这可能看起来像,

switch (a) {
case 0: case 2: case 4: case 6: case 8:
    System.out.println("even < 10");
    break;
case 1: case 3: case 5: case 7: case 9:
    System.out.println("odd < 10");
    break;
}

【讨论】:

  • 循环:是标签吗?
  • @Haidepzai 是的
【解决方案3】:

在switch中,statement break表示结束switch语句。看看秋天的低谷example

在循环中,statement break的意思是结束一个循环。

使用 switch 语句示例后停止循环:

for (int i = 0; i < 3; i++) {
   Boolean shouldBreak = false;

   String line = null;
   switch (a) {
      case 0:
         line = "Hello";
         shouldBreak = true;
         break;
      case 1:
         line = "How are you?";
         shouldBreak = true;
         break;
   }

   if (shouldBreak){
      break;
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2013-11-17
    • 2017-04-25
    相关资源
    最近更新 更多