8

Javaforのループ内にループがネストされている構造があります。ループとループの両方を終了するようにステートメントwhileを呼び出す方法はありますか?breakforwhile

4

5 に答える 5

14

これには、「ラベル付き」ブレークを使用できます。

class BreakWithLabelDemo {
public static void main(String[] args) {

    int[][] arrayOfInts = { { 32, 87, 3, 589 },
                            { 12, 1076, 2000, 8 },
                            { 622, 127, 77, 955 }
                          };
    int searchfor = 12;

    int i;
    int j = 0;
    boolean foundIt = false;

search:
    for (i = 0; i < arrayOfInts.length; i++) {
        for (j = 0; j < arrayOfInts[i].length; j++) {
            if (arrayOfInts[i][j] == searchfor) {
                foundIt = true;
                break search;
            }
        }
    }

    if (foundIt) {
        System.out.println("Found " + searchfor +
                           " at " + i + ", " + j);
    } else {
        System.out.println(searchfor
                           + " not in the array");
    }
}

}

取得元:http : //download.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

于 2011-04-14T21:45:23.970 に答える
3

あなたは3つの方法でそれを行うことができます:

  • メソッド内にwhileループとforループを設定してから、return
  • forループを中断し、whileループで終了するフラグを設定できます
  • ラベルを使用する(以下の例)

これは、3番目の方法(ラベル付き)の例です。

 public void someMethod() {
     // ...
     search:
     for (i = 0; i < arrayOfInts.length; i++) {
         for (j = 0; j < arrayOfInts[i].length; j++) {
             if (arrayOfInts[i][j] == searchfor) {
                 foundIt = true;
                 break search;
             }
         }
     }
  }

このサイトの例

私の意見では、1番目と2番目のソリューションはエレガントです。一部のプログラマーはラベルが好きではありません。

于 2011-04-14T21:44:00.553 に答える
2

ラベル付きの休憩

例えば:

out:
    while(someCondition) {
        for(int i = 0; i < someInteger; i++) {
            if (someOtherCondition)
                break out;
        }
    }
于 2011-04-14T21:44:15.010 に答える
1

ループを関数呼び出しの中に入れて、関数から戻りますか?

于 2011-04-14T21:41:41.227 に答える
1

外側のループにラベルを使用できるはずです(この場合)

だから何かのような

    label:
        While()
        {
          for()
          {
             break label;
          }
        }
于 2011-04-14T21:44:15.877 に答える