Java中if语句后面的continue是什么意思?

11

我有一本书中的示例代码,作者总是在if语句的末尾使用continue。

例如:

int a = 5;
if(a == 5)
{
// some code
continue;
}

对我来说,这毫无意义。这背后可能存在某种质量管理的推理,或者我只是错过了一些更大的观点吗?


9
这是哪一本书? - jlordo
2
唯一的可能性是你有一个外部循环。 - Amit Deshpande
可能是Java中的continue关键字的重复问题。 - Anirudh Ramanathan
好的,这不是一本书,而是一份在线出版物: http://onjava.com/pub/a/onjava/2002/09/04/nio.html?page=3 - John Frost
请勿在您链接的页面上使用 continue,将最后的3改为2。 - jlordo
这是在一个 for 循环语句中,@Jamie。这很重要。 - sbi
4个回答

25

也许那段代码在循环体内 (for/while/do...while)?否则,在条件语句中放置 continue 是毫无意义的。实际上,一个孤立的continue (例如:不在某个循环语句内部) 会在编译时产生错误:continue cannot be used outside of a loop


3
你是对的,我完全错过了它周围的for循环。谢谢! - John Frost

5

Continue用于进入循环的下一个迭代。因此,以下内容是合理的。现在,您可以使用任何条件(您的条件是a == 5),并且无论您想要什么业务逻辑(我的是一个愚蠢的、牵强的例子),都可以终止。

StringBuilder sb = new StringBuilder();
for(String str : strings) {
    sb.append(str);
    if(str.length() == 0) continue; // next loop if empty

    str = str.substring(1);
    sb.append(str);
    if(str.length() == 0) continue; // next loop if empty

    str = str.substring(1);
    sb.append(str);
    if(str.length() == 0) continue; // next loop if empty

    sb.append(str);
}

1
continue 之后加上注释“如果为空则退出循环”最好不要,这样会产生歧义。;-) - assylias

2
有时候强制循环提早迭代是有用的。也就是说,您可能想继续运行循环,但停止处理其主体中此特定迭代剩余的代码。这实际上是一个 goto 跳转到循环末尾的主体后面。continue 语句执行了这样的操作。在 while 和 do-while 循环中,continue 语句会导致控制直接转移到控制循环的条件表达式。在 for 循环中,控制首先转移到 for 语句的迭代部分,然后转移到条件表达式。对于所有这三个循环,任何中间代码都将被跳过。以下是一个使用 continue 使两个数字打印在每一行上的示例程序: // 演示 continue。
class Continue
{ 
public static void main(String args[]) 
    { 
    for(int i=0; i<10; i++) 
        { 
    System.out.print(i + " "); 
    if (i%2 == 0)
    continue; 
    System.out.println(""); 
        } 
    } 
}

这段代码使用%运算符检查i是否为偶数。如果是,循环将继续而不打印换行符。以下是该程序的输出:
0 1 2 3 4 5 6 7 8 9

1

通常,continue 用于跳出深度嵌套的循环,或仅仅为了清晰明了(有争议)。

有时候,continue 还被用作占位符,以便使空的 循环体 更加清晰明了。

for (count = 0; foo.moreData(); count++)
  continue;

这是一个品味问题,我个人不使用“continue”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接