java - 继续/中断时不必要的标签

标签 java loops

我对下一段代码的执行感到困惑:

        label:
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) continue;
            if (i == 99) {
                continue label;
            }
            System.out.println("i = " + i);
        }

我希望这个循环是无限的。但不是。当值为 99 - 程序退出。我尝试使用 continuebreak 运算符,但仍然没有预期的结果。

我只是试着理解为什么这个循环不是无限的,我要怎么做才能做到这一点?

输出:

i = 1
i = 3
......
i = 93
i = 95
i = 97

Process finished with exit code 0

最佳答案

continue continues 标记的循环,不涉及将 i 重置为其初始值;所以你所做的任何事情都不能阻止 i 增加,直到它达到 100 并且循环终止。是的,你说得对,标签是不必要的。

要使其无限,只需在循环内重置i,不需要标签或continue:

for (int i = 0; i < 100; i++) {
    if (i == 99) {
        i = 0;
    }
    System.out.println("i = " + i);
}

或者可能是这个,它再次输出 99 然后 0 并继续:

for (int i = 0; i < 100; i++) {
    System.out.println("i = " + i);
    if (i == 99) {
        i = -1;
    }
}

或者如果出于某种原因您真的非常想使用 continue 执行此操作,您需要第二个外部循环:http://ideone.com/ofgpK3

label:
while (true) {
    for (int i = 0; i < 100; i++) {
        System.out.println("i = " + i);
        if (i == 99) {
            continue label;
        }
    }
}

关于java - 继续/中断时不必要的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27468925/

相关文章:

java - 为什么我的代码会导致java中的堆栈溢出错误?它最终应该终止。 for循环版本不会导致错误

java - Java 中的最小值不起作用

python - 为什么循环中只有一个警告?

c# - 我在循环中泄漏内存吗?

java - 这个 Spring Security 图意味着什么?

java - 为什么 switch 语句在 case 之后继续

java - 在这里拆分字符串的好方法是什么?

java - 用 Main 方法混淆类名

R:是否可以矢量化/加速这个双循环?

javascript - 使用 ajax 调用(ajax 和 for)时获取数据的问题