以下是docs.oracle
的示例代码class BreakWithLabelDemo {
public static void main(String[] args) {
int[][] arrayOfInts = {
{ 32, 87, 3, 589 },
{ 12, 1076, 2000, 8 },
{ 622, 127, 77, 955 }
};
int searchfor = 12;
int i;
int j = 0;
boolean foundIt = false;
search:
for (i = 0; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length;
j++) {
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
break search;
}
}
}
if (foundIt) {
System.out.println("Found " + searchfor + " at " + i + ", " + j);
} else {
System.out.println(searchfor + " not in the array");
}
}}
这是我的问题:为什么我必须在执行嵌套for循环之前初始化变量j?当我不这样做时,代码编译时出错。
提前致谢。
答案 0 :(得分:4)
您必须初始化j
,因为在最终for
语句中访问它之前,编译器不知道它是否会在内部if
循环中初始化。
就编译器而言,外部for
循环的主体可能无法执行。
答案 1 :(得分:2)
如果arrayOfInts.length
为0,则不会初始化j
。为了使编译器确定始终初始化j
,您需要将第一个循环的条件设为常量表达式。例如,如果用以下内容替换外部循环:
for (i = 0; true; i++)
编译器将接受int j;
而不进行初始化。
详细规则在JLS #16中定义。特别是,j
需要在打印语句中使用之前明确赋值。
答案 2 :(得分:0)
因为您在for循环之外使用j
。
特别是,您在代码底部的print语句中使用它。