“立刻”打破2个嵌套循环

时间:2014-04-25 12:33:02

标签: java for-loop while-loop nested-loops break

请查看以下代码(Java)

 while((str=br.readLine())!=null)
        {
            int tempCounter=0;

            for(int i=0;i<str.length();i=i+3)
            {
                String word = str.substring(i, i+3);
                //  System.out.println(word);
                int insert = db.insert(index, word);
                if(insert<0)
                {
                    break;
                }
                tempCounter++;
            }
            index++;

            System.out.println("Index Updated: "+index);
            System.out.println(String.valueOf("Total words in this run: "+tempCounter));

            if(index==5)
            {
                break;
            }

        }

如果insert小于0,我需要打破forwhile循环。我怎么能这样做?

这里的问题是我需要打破&#34;两者&#34;如果insert小于0,则循环播放。即使使用标签,也无法一个接一个地添加2个break命令。

6 个答案:

答案 0 :(得分:1)

您可以尝试这个简单的示例来查看标记循环的工作原理:

public static void main(String[] args) {
    int i = 0; int j = 0;
    EXIT: for (; i < 10; i++) {
        for (; j < 10; j++) {
            if (i * j > 50) {
                break EXIT;
            }
        }
        j = 0;
    }
    System.out.printf("Finished with i=%s and j=%s\n", i, j);

}

输出:

Finished with i=6 and j=9

答案 1 :(得分:0)

+1 .. @AntonH ..标签是第一个选项..如果你对如何使用标签感到困惑..你可以使用如下的布尔变量..

while (...) {

    boolean brk = false;
    for (...) {
        if(insert<0)
        {   brk = true;
            break;
        }
    }
    if(brk)
    {
        break;
    }
}

答案 2 :(得分:0)

 while((str=br.readLine())!=null)
 {
        int tempCounter=0;
        boolean check = false;
        for(int i=0;i<str.length();i=i+3)
        {
            String word = str.substring(i, i+3);
            //  System.out.println(word);
            int insert = db.insert(index, word);
            if(insert<0)
            {
                check = true;
                break;
            }
            tempCounter++;
        }
        index++;
        if(check)
            break;

        System.out.println("Index Updated: "+index);
        System.out.println(String.valueOf("Total words in this run: "+tempCounter));

        if(index==5)
        {
            break;
        }

    }

你可以这样做

答案 3 :(得分:0)

您的问题已部分回答here。使用while循环行前面的标签,例如OUTMOST,然后当插入小于0时,&#39;突破OUTMOST&#39;。例如:

OUTMOST:
    while(someCondition) {
        for(int i = 0; i < someInteger; i++) {
            if (someOtherCondition)
                break OUTMOST;
        }
    }

答案 4 :(得分:0)

一种方法是使用异常,具体取决于db.insert例程的预期结果。

简而言之,创建一个新的EDBInsertionException异常(一个扩展Exception的类)并在for循环中引发异常。

try
{

    while((str=br.readLine())!=null)
    {
        int tempCounter=0;

        for(int i=0;i<str.length();i=i+3)
        {
            String word = str.substring(i, i+3);
            //  System.out.println(word);
            int insert = db.insert(index, word);
            if(insert<0)
            {
                throw new EDBInsertionException("No record inserted: " + insert);
            }
            tempCounter++;
        }
        index++;

        System.out.println("Index Updated: "+index);
        System.out.println(String.valueOf("Total words in this run: "+tempCounter));

        if(index==5)
        {
            break;
        }

    }
}
catch (EDBInsertionException e)
{
    // MZ: The database insertion has failed
    log.error(e.getMessage(), e);

    // MZ: Supplemental action: Delegate, escalate, rollback, etc           
}

修改

扩展该示例以说明(用户)例外的潜在用法。

答案 5 :(得分:0)

IMO,一个例外是不合适的;标签很少见,未来读者不太可能理解。

调用KISS原则,为什么不使用额外的标志并扩充每个循环中使用的表达式:

boolean isInsertFail = false;

while((! isInsertFail) && (str=br.readLine())!=null))
        {
            int tempCounter=0;

            for(int i=0;(! isInsertFail) && i<str.length();i=i+3)
            {
                String word = str.substring(i, i+3);
                //  System.out.println(word);
                int insert = db.insert(index, word);
                if(insert<0)
                {
                    isInsertFail = true;
                }
                tempCounter++;
            }

            if (!isInsertFail) {
                index++;

                System.out.println("Index Updated: "+index);
                System.out.println(String.valueOf("Total words in this run: "+tempCounter));

                if(index==5)
                {
                    break;
                }
            }
        }

请注意,在Eclipse中,可以单击isInsertFail,语法突出显示应说明其用法。