0

我有以下程序结构:

outerLoop:
for (i =0; i<x; i++) {
    if(check condition) {
       a = /* do something to calculate a */
       goto jump;
    } else {
        //do something else
    }
}

jump:
if (check condition) {
   //do something
   goto outerLoop;
}

所以就像上面看到的,我想将控制从循环的一部分转移到循环外看到的if条件。我想再次从语句跳转到循环。我怎么做?Java中有声明吗?forifforifgoto

4

5 回答 5

2

当您有多个嵌套的 for 循环时,有一种方法可以使用 break 和标签进行跳转。

请参阅:http ://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

来自链接的示例:

class BreakWithLabelDemo
{
    public static void main(String[] args)
    {
        int[][] arrayOfInts =
        {
            { 32,  87,   3,    589 },
            { 12,  1076, 2000, 8   },
            { 622, 127,  77,   955 }
        };

        int searchfor = 12;
        int i;
        int j = 0;
        boolean foundIt = false;

        search:
            for (i = 0; i < arrayOfInts.length; i++)
            {
                for (j = 0; j < arrayOfInts[i].length; j++)
                {
                    if (arrayOfInts[i][j] == searchfor)
                    {
                        foundIt = true;
                        break search;
                    }
                }
            }

        if (foundIt)
        {
            System.out.println("Found " + searchfor + " at " + i + ", " + j);
        }
        else
        {
            System.out.println(searchfor + " not in the array");
        }
    }
}
于 2013-07-14T19:19:44.520 回答
2

反对其他答案:不要使用break任何一个。我认为您在这里尝试完成的工作可以通过以下方式完成:

int calculateA() {
    for (i = 0; i < x; i++) {
        if (/* a was found */) {
            return a;
        } else {
            // do something else
        }
    // What to do when `a` is not found is now explicit
    throw new Exception("cannot calculate a");
}

// OuterLoop should be an actual loop
int a = calculateA();
while (/* second condition */) {
    a = calculateA();
}
于 2013-07-14T19:31:23.983 回答
1

Java 不支持goto(尽管这是一个保留字)。但是 java 作为其他类 c 语言支持breakcontinue. 你需要break在这里。它从循环中逃脱。

与 C 不同,java 具有break“几乎”goto但有限的标签。当您想逃离多个嵌套循环时,它很有用。

于 2013-07-14T19:17:40.647 回答
0

您可以使用函数调用在带有break和的语句之间跳转continue。看看这是否有帮助:

for (i =0; i<x;i++){
if(check condition)
{
   /*do something
   calculate 'a'
   */
   jump();
   break; //use break if you want to exit the loop
}
else 
//do something else
}//method ends 


void jump()
{
   if(check condition)
   //do something
}
于 2013-07-14T19:20:53.013 回答
0

break或者continue,根据您需要做什么。

看到这篇文章的差异。

于 2013-07-14T19:18:14.947 回答