关于java:“同时打破2个嵌套循环”

Breaking 2 nested loops “at once”

本问题已经有最佳答案,请猛点这里访问。

请看下面的代码(Java)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 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循环。我该怎么做?

这里的问题是,如果insert小于0,我需要中断"两个"循环。而且,即使使用标签,也不能逐个添加2个break命令。


你可以试试这个简单的例子是知识工程:a标记环湖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
"
, i, j);

}

输出:

1
Finished with i=6 and j=9


海事组织,异常是不适当的;a标签是罕见的和不理解的读者可能会在未来。

调用KISS原则,为什么不只是使用额外的标志和疾病的表达用在每个回路:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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,语法高亮和应说明其使用。


一个方法是使用在异常,取决于预期的result of the db.insert例程。

在短,创建一个新edbinsertionexception异常(A舱内异常例外)提高您的for循环。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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          
}

编辑

一个扩展的例子,说明使用的(潜在用户)的异常。


你已经在这里回答问题的部分。使用标签在前面的while循环线,例如outmost当插入,然后是小于0,outmost"休息"。例如:

1
2
3
4
5
6
7
OUTMOST:
    while(someCondition) {
        for(int i = 0; i < someInteger; i++) {
            if (someOtherCondition)
                break OUTMOST;
        }
    }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 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;
        }

    }

你可以这样做


+ 1。antonh @。标签是第一选择。如果你明白如何使用标签。你可以使用一个布尔变量样下面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
while (...) {

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