将符号从 for 循环传递到 if 语句

Passing down symbol from a for loop to an if statement

"for loop" 中的符号似乎是循环本身的局部符号。 有什么方法可以将有关符号当前代表什么的信息向下传递到例如 if 语句?

例如,这会产生一个错误:

int[] myAry = {1, 2, 3};
for (int i : myAry)
  if (i == 2);
    System.out.println(i);

虽然这不是:

int[] myAry = {1, 2, 3};
for (int i : myAry)
  if (i == 2);
    System.out.println("Match found!");

两个代码片段都是错误的,应该是:

if (i == 2)
    System.out.println(i);

if (i == 2)
    System.out.println("Match found!");

条件后不应有分号。

第一个片段导致编译错误,因为 System.out.println(i); 在循环之外,所以 i 未定义。

第二个片段不会导致编译错误(因为它不会尝试访问 i),但无论 if 条件的评估结果如何都会执行,因为它是在 for 循环之外。

一些方式:

  • 如果您不想使用大括号,请确保在 for 之后是单个可执行块。

    int[] myAry = {1, 2, 3};
    for (int i : myAry)
      if (i == 2) // Remove the semi-colon. Seems inadvertently added.
          System.out.println(i);
    
  • 使用大括号。

    int[] myAry = {1, 2, 3};
    for (int i : myAry){
      if (i == 2); // Assuming this was purposeful, seems unlikely though.
          System.out.println(i);
    }
    

你的第一个代码基本上是:

int[] myAry = {1, 2, 3};
for (int i : myAry){
  if (i == 2){}
}
    System.out.println(i);

所以,确实,i 不存在于您尝试打​​印它的范围内。要么在 for 循环之外声明 i,要么按照您需要的方式放置括号。