请查看以下代码(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,我需要打破for
和while
循环。我怎么能这样做?
这里的问题是我需要打破&#34;两者&#34;如果insert
小于0,则循环播放。即使使用标签,也无法一个接一个地添加2个break
命令。
答案 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
,语法突出显示应说明其用法。