【问题标题】:Break in nested for loops [duplicate]打破嵌套的for循环[重复]
【发布时间】:2010-12-02 06:36:34
【问题描述】:

可能重复:
How to Break from main/outer loop in a double/nested loop?

我有以下情况:

      for(int i = 0; i < schiffe.length-1; i++){
            if(schiffe[i].schaden){
                schlepper.fliege(schiffe[i].x, 
                                 schiffe[i].y, 
                                 schiffe[i].z);
                schlepper.wirdAbgeschleppt = schiffe[i];
                for(int k = 0; k < stationen.length-1; k++){
                    if(stationen[k].reparatur == null){
                        schlepper.fliege(stationen[k].x,
                                         stationen[k].y,
                                         stationen[k].z);
                        break;
                    }
                }
            }
        }

我想要

schlepper.fliege(stationen[k].x,
                 stationen[k].y,
                 stationen[k].z);

执行一次,然后跳出内部循环并继续执行 for(int i... 循环。所以我在代码中使用了 break。但我不确定这是否正确。是否 break导致所有循环中断还是只为第二个循环中断?

【问题讨论】:

    标签: java loops for-loop break labelled-break


    【解决方案1】:

    它只打破内部循环,因此可以做你想做的事。要中断多个级别,在 Java 中,您可以使用“标记中断”,如下所示:

    schiffe_loop:
    for(int i = 0; i < schiffe.length-1; i++){
        some_stuff();
        for(int k = 0; k < stationen.length-1; k++){
            if (something_really_bad_happened()) {
                break schiffe_loop;
            }
        }
    }
    

    但通常你不需要这个。

    无论如何,您都可以考虑为内部循环创建一个单独的方法;你可以很容易地给它命名(“find_available_station”或类似的东西),并且可能需要其他地方。

    另外,请注意,您现在的循环会丢失每个数组的最后一个元素。仔细想想为什么你使用 但不包括指定的每个值。

    【讨论】:

      【解决方案2】:

      break 将打破最里面的循环,在你的情况下是第二个循环。

      要使其打破外循环,您可以使用标记为 break:

      OUTER:for(...) {
               for(...) {
                  break OUTER;
               }
            }
      

      【讨论】:

        【解决方案3】:

        break 只跳出最里面的循环。

        【讨论】:

          【解决方案4】:

          break 只会导致最近的循环中断(第二个循环)

          【讨论】:

            【解决方案5】:

            只有第二个。你当然可以使用“goto”。

            【讨论】:

              【解决方案6】:

              Break 语句终止最近的封闭循环或 switch 语句,它出现在许多语言中,但您可以尝试并确保 100%。

              【讨论】:

                【解决方案7】:

                将内部的两个循环放在一个函数中,并使用 return 来打破它们。

                【讨论】:

                  【解决方案8】:

                  如果您需要更多控制,可以使用带标签的中断。更多信息here。正如其他人所说,break 将关闭最近的循环。

                  【讨论】:

                    【解决方案9】:

                    如何使用一个你称之为“找到”的布尔值并像这样使用它:

                    while(!found) {
                        for(...) {
                            //todo
                        }
                    }
                    

                    【讨论】:

                      【解决方案10】:

                      我认为你可以再做一件事..

                      for(int k = 0; k

                                         k =  stationen.length + 1 ;
                      
                                      }
                                  }
                      

                      【讨论】:

                        猜你喜欢
                        • 2012-11-30
                        • 2011-10-22
                        • 2010-10-13
                        • 2015-03-03
                        • 2013-03-09
                        • 1970-01-01
                        相关资源
                        最近更新 更多