0

以下のコードがあります。for ループを書き、その中に switch ステートメントがあります。スイッチには 2 つのケースがあり、i==someOtherValuetrue の場合、ループ全体が終了する必要があります。

for (//iterate over elements){
    int i = someValueTakenFromLoop;
    if(i==someOtherValue){

        switch(i){
            case 5:
                //some logic
                break;
            case 6:
                //some logic
                break;
         }
     }
 }

true の場合は反復処理中i==someOtherValueに、ループを終了する必要があります。break ステートメントをサイド スイッチの外に保持する必要がありますか?

    for(//iterate over elements){
        int i = someValueTakenFromLoop;
        if(i==someOtherValue){
            switch(i){
                case 5:
                    //some logic
                    break;
                case 6:
                    //some logic
                    break;
            }
            break;
         }
     }

ありがとう!

4

6 に答える 6

7
mylabel:
for(...){
   switch(...){
      case x: break mylabel;
   }
}
于 2012-05-28T12:27:20.870 に答える
6

ケースが2つしかない場合は、if-else if代わりに単純なステートメントを使用してみませんswitchか?

于 2012-05-28T12:28:20.803 に答える
1

はい、

内側のスイッチを壊すと、コントロールはスイッチから出て、外側のループからは出ないので、ループから抜け出すには、外側のスイッチをもう一度壊す必要があります。そうでない場合は、ラベル付きループを使用しますが、ラベル付きコードを使用する場合は、それらを作成してください。読みやすさを向上させるために大文字で表記しているため、目立ち、はっきりと読むことができますが、Javaの規則ではキャメルケースの使用が推奨されています。

1

for(...) {
      switch(...) {
         break; // this will break from switch
      }
      if(condition) {
         break; // this will break from for loop
      }
   }

2

OUTERLOOP:
for(...){
   switch(...){
       break OUTERLOOP;       
   }
}
于 2012-05-28T12:27:11.003 に答える
0

break以下に指定するよう にを配置する必要があります。

if  (i == someOtherValue ) {  
  break; // breaks for loop
} // for some other value
// switch( to continue here
...
于 2012-05-28T12:28:40.573 に答える
0

break前者はそれをswitch陳述から外すだけです。次のものは機能します。

for(/*iterate over elements*/){
    int i = someValueTakenFromLoop;
    if(i==someOtherValue){
        switch(i){
        case 5:
            //some logic
            break;
        case 6:
            //some logic
            break;
        }
        break;
    }
}
于 2012-05-28T12:32:48.877 に答える
0

edalorzo のソリューションは完璧ですが、もう 1 つ追加したいことがあります (コメントにアクセスできません)。

ほとんどの場合、メソッドを使用してそのような制御構造を再構築できます --

for ( /* ... */ ) {
    boolean finished = doSomething(i);
    if (finished) {
        break;
    }
}

//Later in the same class
private boolean doSomething(int val) {
    switch (val) {
        case 0:
            // do something;
            return true; // Break out of outer loop
        case 5:
            // do something absolutely terrifying
            break;
    }
    return false;
}

編集:スイッチ条件とは無関係にブレークするつもりであることに気づきました-かなり単純です:

for ( /* ... */ ) {
    if ( /* ... */ ) {
        switch ( /* ... */ ) { /* ... */ }
        break;
    }
}
于 2012-05-28T12:33:05.157 に答える