转到for循环中的前一个语句

时间:2017-09-19 00:05:41

标签: java for-loop if-statement

我有一个类似于下面给出的for循环。

for(int i=0; i<10; i++)
{
   boolean condition = checkCondition();    /* line 3 */

   if(condition)
   {
     if(some other condition A)
     {
       move to line 3;
     }
     else if(some other condition B)
     {
      call_method_B();
     }
     else
     {
      call_method_C();
     }
  }
  else
  {
    call_method_D();
  }
}

如何使程序返回上述if语句中的第3行?我不想打破迭代。需要处于相同的迭代中,只需要回到第3行。

4 个答案:

答案 0 :(得分:2)

在同一次迭代中,只需在调用continue之前减去i。 请注意,如果条件永远不会改变,这将使您进入无限循环。

for(int i=0; i<10; i++)
{
   boolean condition = checkCondition();    /* line 3 */

   if(condition)
   {
     if(some other condition A)
     {
       move to line 3;
       i--;  //this will cancel out the i++ in the for loop  
       continue; //this will bring you back to line 3
     }

     ... the rest of your codes

答案 1 :(得分:2)

  

我不想打破迭代。需要处于相同的迭代中,只需要回到第3行。

我认为你需要一个while循环。然后,您可以更好地控制迭代时间。当你得到条件A检查时,c.moveToPosition()不会改变,循环重复,否则你可以说i

i++

答案 2 :(得分:1)

我相信您的问题似乎需要一种递归方法而不是迭代方法。

上述问题可以通过以下方式使用递归方法解决:

public void checkRecursive()
{
    boolean condition = checkCondition(); 

    if (base_condition_to_avoid_recursion)
        return;

    if (condition)
    {
        if (some other condition A)
        {
            checkRecursive();
        }
        else if (some other condition B)
        {
            call_method_B();
        }
        else
        {
            call_method_C();
        }
    }
    else
    {
        call_method_D();
    }
}

答案 3 :(得分:0)

private static void run() {

    for (int i = 0; i < 10; i++) {
        boolean condition = checkCondition();    /* line 3 */

        if (condition) {
            if (some other condition A)
            {
                // move to line 3
                // restart the method from beginning
                run();

                // break out of loop
                break;

            } else if (some other condition B){
                call_method_B();
            } else{
                call_method_C();
            }
        } else {
            call_method_D();
        }
    }

}