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" );
    }
}

我想做的就是从第三个如果到第一个如果。

我们知道break 和 continue可以在loops中使用。我们可以为实现相同的目标吗?

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 语言规范

但是,如果您尝试在我的一个项目中提供此代码,我们可能会说话。

于 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

我不确定您要通过此实现的要求。在第三个循环之后再添加一个 if 条件,如果仅满足条件,则执行第二个循环的剩余部分。您可以在第三个 if 块内设置此条件.

而不是所有这些,你可以切换到'switch',这会更干净。

于 2013-01-11T13:20:14.757 回答
1

我会引入第二个状态标志来捕捉最里面的条件:

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 回答
0

while添加循环和break语句的简单组合可能会有所帮助。

boolean status = false;
for ( int i = 0; i <= 5; i++ ) {
    if ( i == 4 ) { 
        System.out.println ( "Enter into first if" );
        while(True) {
            if ( status == false ) {
                System.out.println ( "Enter into second if" );
                status = true;
                if ( status == true ) {
                    System.out.println ( "Enter into third if" );
                    break;//The key statement
                    //third if body
                }
                //second if body                             
            }
            break;//Don't forget break while loop
        }          
        //first if body
        System.out.println ( "Before exiting first if" );
    }
}

或者您可以使用try .. catch ...

于 2017-02-24T03:45:55.877 回答