0

したがって、基本的に以下のコードが与えられます。

いつaction = 2;、そしてこれから2に設定されますかmode = 1i

私は同僚のコードに取り組んでおり、このように書かれていますが、breakはifをスキップして、残りの部分を続行すると思いましたcase 2。したがって、基本的にifステートメントは無意味です。

switch(action){

   case 1: i = 1; break;

   case 2: if(mode == 1)
           {
              break;
           }

           i = 2;
           break;

   case 3: i = 3; break;

私はこれを次のように書き直しました:

 case 2: if(mode != 1)
            i = 2;
         break;

しかし、それだけではなく、もっと複雑な場所でもあります。リファクタリングする場合は、正しい情報が必要です。

4

4 に答える 4

7

「ifループ」のようなものはありません。Breakは「if」ステートメントを参照できません。

言語仕様へのポインタについては、Wassermanの回答を参照してください。

また、1<=アクション<=3と仮定すると、コードは次のように単純化されます。

if(! (action == 2 && mode == 1)) {
     i = action;
}
于 2012-05-28T12:10:25.060 に答える
1

JLSセクション14.15

breakステートメントは、囲んでいるステートメントから制御を移します。

BreakStatement:

   break Identifieropt ;

ラベルのないbreakステートメントは、すぐに囲むメソッドまたは初期化ブロックの最も内側の囲んswitchでいるwhile、、、doまたはforステートメント(強調が追加されている)に制御を移そうとします。ブレークターゲットと呼ばれるこのステートメントは、すぐに正常に完了します。

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

それがあなたが知りたいことであるならば、あなたのリファクタリングは正しいです。

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

action == 2mode == 1が実行されない場合i = 2(なぜテストしないのですか?ここで質問するよりも高速です)。

しかし、あなたの改善はとにかくきれいです、私はそれを使います。

于 2012-05-28T12:13:54.120 に答える