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; } } |
如果
这里的问题是,如果
你可以试试这个简单的例子是知识工程:a标记环湖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
输出:
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中,可以点击上一
一个方法是使用在异常,取决于预期的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; } } |