3

このコード サンプルを検討してください。

このコードは、私の質問を説明するのに役立ちます。

boolean status = false;
for ( int i = 0; i <= 5; i++ ) {
    if ( i == 4 ) { 
        System.out.println ( "Enter into first if" );
        if ( status == false ) {
               System.out.println ( "Enter into second if" );
               status = true;
               if ( status == true ) {
                    System.out.println ( "Enter into third if" );
                    //third if body
               }
               //second if body                             
        }
        //first if body
        System.out.println ( "Before exiting first if" );
    }
}

私がやりたいことは、3 番目の if から 1 番目の if に出てくることだけです。

ループで使用できるbreak 、 continueがあることはわかっています。ブロックでも同じことを達成できますか?

4

6 に答える 6

5

まあ、あなたはどのブロックにも壊れることができます:

public class Bar {

  static void foo(boolean b) {
    foo: {
      if (b) {
        break foo;
      }
      System.out.println(b);
    }
  }

  public static void main(String[] args) {
    foo(true);
    foo(false);
  }
}

出力:

false

詳細については、Java 言語仕様を参照してください。

ただし、私のプロジェクトの 1 つでこのコードを配信しようとすると、おそらく言葉が出てきます。

于 2013-01-11T13:28:02.380 に答える
3

if #2 と #3 をカプセル化するメソッドを作成します。次にreturn、#3 if ブロックの内側から:

boolean status = false;
for ( int i = 0; i <= 5; i++ ) {
    if ( i == 4 ) { 
        System.out.println ( "Enter into first if" );
        status = perform2ndAnd3rdIf(status);
        System.out.println ( "Before exiting first if" );
    }
}

private boolean perform2ndAnd3rdIf(boolean status) {
    if ( status == false ) {
        System.out.println ( "Enter into second if" );
        status = true;
        if ( status == true ) {
            System.out.println ( "Enter into third if" );
            return status;
            //third if body
        }
        //second if body                             
    }
    return status;
}

ネストされたifブロックの代わりにメソッドを使用すると、全体的な読みやすさとコードの理解力が向上します。コード コメントの代わりに、そのメソッドに意味のある名前を付ける必要があります (もちろん perform2ndAnd3rdIf())。

于 2013-01-11T13:21:35.440 に答える
2

あなたはいつでもこれを行うことができます:

mylabel:
boolean status = false;
for ( int i = 0; i <= 5; i++ ) {
    if ( i == 4 ) { 
        System.out.println ( "Enter into first if" );
        if ( status == false ) {
               System.out.println ( "Enter into second if" );
               status = true;
               if ( status == true ) {
                    System.out.println ( "Enter into third if" );

                    break mylabel;

                    //third if body
               }
               //second if body                             
        }
        //first if body
        System.out.println ( "Before exiting first if" );
    }
}

しかし、代わりにコードをリファクタリングする必要があると思います。

于 2013-01-11T13:26:01.730 に答える
1

その最も内側の状態をキャッチするために、2 番目のステータス フラグを導入します。

boolean secondStatus = false;
boolean status = false;
for ( int i = 0; i <= 5; i++ ) {
    if ( i == 4 ) { 
        System.out.println ( "Enter into first if" );
        if ( status == false && secondStatus == false ) {
               System.out.println ( "Enter into second if" );
               status = true;
               if ( status == true ) {
                    System.out.println ( "Enter into third if" );
                    //third if body
                    secondStatus = true;
               } else {
                   //second if body
               }                           
        }
        //first if body
        System.out.println ( "Before exiting first if" );
    }
}
于 2013-01-11T13:26:01.237 に答える
1

これで達成しようとしている要件がわかりません.3番目のループの後にif条件をもう1つ入れて、条件が満たされた場合にのみ2番目のループの残りの部分を実行します.3番目のifブロック内にこの条件を設定できます.

これらすべての代わりに、よりクリーンな「switch」に切り替えることができます。

于 2013-01-11T13:20:14.757 に答える