我一直盯着屏幕看了一段时间,在这种情况下,我确实需要标记循环的解释:
package com.misterkourouma.oca8.starter.test;
public class LabeledLoop{
public static void main(String[] args) {
int x = 5, j = 0;
OUTER: for (int i = 0; i < 3;) // -> This line has no curly braces but still compiles
INNER: do {
i++;
x++;
if (x > 10)
break INNER;
x += 4;
j++;
} while (j <= 2);
System.out.println(x);
}
}
但是这个不能编译:
package com.misterkourouma.oca8.starter.test;
public class LabeledLoop2{
public static void main(String[] args) {
int x = 5, j = 0;
OUTER: for (int i = 0; i < 3;)
System.out.println("Labeled Loop");
INNER: do {
i++;
x++;
if (x > 10)
break INNER;
x += 4;
j++;
} while (j <= 2);
System.out.println(x);
}
}
所有INNER:
块都被视为(我想)为单个语句,但它不以分号结尾,我想知道为什么吗?
我正在为OCA 8做准备,这就是我需要了解这些奇怪内容的原因之一。
编辑:
我的问题是在LabeledLoop示例中,为什么会编译
预先感谢您的帮助。
答案 0 :(得分:2)
据我了解,您将在以下语句中得到编译错误:
i++;
这是因为您没有在OUTER: for (int i = 0; i < 3;)
语句中创建任何块(使用花括号{}),因此,默认情况下,OUTER循环的作用域将保留到下一个语句(在您的System.out.println("Labeled Loop");
)。当您在三个语句之后增加变量i
时,它将给您编译错误,表明未声明i
。
答案 1 :(得分:0)
您错过了for循环周围的{}大括号。这就是原因,代码未编译。它无法识别变量i。由于我的范围是
OUTER: for (int i = 0; i < 3;) {
System.out.println("Labeled Loop") only
public static void main(String[] args) {
int x = 5, j = 0;
OUTER: for (int i = 0; i < 3;) {
System.out.println("Labeled Loop");
INNER: do {
i++;
x++;
if (x > 10)
break INNER;
x += 4;
j++;
} while (j <= 2);
System.out.println(x);
}
}
答案 2 :(得分:0)
弯括号在Java中很重要,而缩进则不重要。
此代码:
public static void main(String[] args) {
int x = 5, j = 0;
OUTER: for (int i = 0; i < 3;)
System.out.println("Labeled Loop");
INNER: do {
i++;
x++;
if (x > 10)
break INNER;
x += 4;
j++;
} while (j <= 2);
System.out.println(x);
}
表示:
public static void main(String[] args) {
int x = 5, j = 0;
OUTER: for (int i = 0; i < 3;)
System.out.println("Labeled Loop");
INNER: do {
i++;
x++;
if (x > 10)
break INNER;
x += 4;
j++;
} while (j <= 2);
System.out.println(x);
}
当然不会编译。
答案 3 :(得分:0)
如果for循环后没有括号,则认为只有第一个表达式在循环内。 因此第一个示例等效于
OUTER: for (int i = 0; i < 3;){
INNER: do {
i++;
x++;
if (x > 10)
break INNER;
x += 4;
j++;
} while (j <= 2);
}
System.out.println(x);
变量i在for循环中声明。在第一个示例中,do-while在for循环内,因此一切正常。第二个示例等效于
OUTER: for (int i = 0; i < 3;){
System.out.println(x);
}
INNER: do {
i++;
x++;
if (x > 10)
break INNER;
x += 4;
j++;
} while (j <= 2);
所以变量i超出范围,并且不在while循环中声明