java - 带标签的break语句...下一步在哪里

标签 java

我正在做 Sierra-Bates SCJP 学习指南,想知道以下问题:

public class Wind {

  public static void main(String[] args) {

    foreach:
      for(int j=0; j<5; j++) {
        for(int k=0; k< 3; k++) {

          System.out.print(" " + j);
          if(j==3 && k==1) break foreach;      //1
          if(j==0 || j==2) break;

        }
      }

  }
}

当k的值等于1并且执行break foreach(在第1行)时,迭代到底在哪里进行,在我看来,现在这会退出整个循环。下一个迭代点在哪里?如果退出外循环,如何进行进一步的迭代? 学习书中给出的答案是0111233。在我看来,在退出整个循环之前只打印01。没有?

最佳答案

where exactly does iteration go after this, to my mind does this now exit the whole loop

是的,因为您正在突破外循环。因此,它会退出整个循环。

Where is the next point of iteration?

跳出外循环后就不会出现迭代。

How is there any further iterations if the outside loop is exited ?

不,不会有任何进一步的迭代。您为什么期望进一步的迭代?当您跳出循环时,该循环的进一步迭代将不会运行。

要获取输出,请尝试逐步执行代码。拿出纸和铅笔,为每个迭代写下 j 和 k 的值,并查看每次执行哪个 if

请注意,您的第二个 if 只是打破内部 for 循环。

这是您的两个 if 条件:-

  if(j==3 && k==1) break foreach;      // 1
  if(j==0 || j==2) break;              // 2

迭代:-

1). j = 0, k = 0: - 打印 0。第一个 if 失败,第二个 if 成功。你打破了内循环。继续外部 (j++)

2). j = 1, k = 0: - 打印 1。第一个 if 失败,第二个 if 失败。继续内循环(k++)

3). j = 1, k = 1: - 打印 1。两个 if 均失败。继续内循环(k++)

4). j = 1, k = 2: - 打印 1。两个 if 均失败。继续内循环(k++)

5). j = 1, k = 3: - 内部循环条件失败。继续外循环(j++, k = 0)

6)。 j = 2, k = 0: - 打印 2。第一个 if 失败。第二个 if 成功。打破内循环。继续外循环(j++)

7)。 j = 3, k = 0: - 打印 3。两个 if 均失败。继续内循环。 (k++)

8)。 j = 3, k = 1: - 打印 3。首先 if 成功。跳出外循环。迭代结束。

现在看看,打印语句是什么:-

0111233

关于java - 带标签的break语句...下一步在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13311496/

相关文章:

java - 如何在java中用空子字符串 ""(删除子字符串)替换字符串中的任何子字符串

java - Android 应用程序 Gmail 的 OAuthentication 错误

Java运行时执行: Get information from Firefox

java - 使用 Apache POI 从 json 数组编写 Excel 工作表

java - 使 Struts 2 与 Java 8(遗留 ASM 3)兼容

java - 使用增强的for循环java迭代多维数组

java - 在哪里放置以及如何获取系统范围配置数据的正确位置,例如system_home 以独立于 Java 的平台方式?

java - 从 CGI 脚本调用 Java 程序失败

Java小程序: monitor HTTP requests

java - 加入有限制的字符串