如何在代码的不同部分之间跳转?

时间:2013-07-14 19:14:30

标签: java goto

我有以下程序结构:

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循环的for部分转移到循环外看到的if条件。我想再次从for语句跳转到if循环。我怎么做? Java中是否有goto语句?

5 个答案:

答案 0 :(得分: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");
        }
    }
}

答案 1 :(得分: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();
}

答案 2 :(得分:1)

Java不支持goto(尽管这是一个保留字)。但是,与其他类c语言一样,java支持breakcontinue。你需要break。它逃脱了循环。

与C相反,java的break标签“几乎”goto但有限。当您想要从多个嵌套循环中逃脱时,它非常有用。

答案 3 :(得分:0)

根据您的需要,

breakcontinue

请参阅this帖子了解差异。

答案 4 :(得分:0)

您可以使用函数调用在伴随breakcontinue的语句之间跳转。  看看这是否有帮助:

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
}