这段代码可以使用
public static void main(String[] args) {
//print from 1-100
for (int i = 0;
i < 100;
i ++)
{
System.out.print(i + "\n ");
}
}
但这个没有。
public static void main(String[] args) {
//print from 1-100
for (int i = 0;
i < 100;
i ++); // Why does ; stop i from being recognized?
{
System.out.print(i + "\n ");
}
}
为什么在;
之后i++)
阻止变量在System.out.print(i + "\n ");
中被识别?
这对Java来说是独一无二的吗?
答案 0 :(得分:12)
末尾的额外;
意味着for循环变为如下:
for(int i = 0; i < 100; i++) {
//Empty
}
因此,在这段代码中:
{
System.out.print(i + "\n ");
}
i
超出范围且无法识别,因为您的代码基本上是这样的:
for (int i = 0;
i < 100;
i ++) // Why does ; stop i from being recognized?
{/*FOR LOOP*/}
{
System.out.print(i + "\n "); //i is out of scope here.
}
答案 1 :(得分:0)
在java和许多其他语言中没有定义for循环:
BasicForStatement:
for ( ForInitializer? ; ForConditionExpression? ; ForPostExpression? ) Statement
此语句可以是块,如下所示:
for(...){
...
}
或独立声明。单独的;
被解释为无操作语句。因此:
for (int i = 0;
i < 100;
i ++); // <-- statement that executes in the for-loop
{ // <-- this block doesn't belong to the for-loop
System.out.print(i + "\n");
}
由于块中的代码不属于循环,i
不在范围内。
答案 2 :(得分:0)
你的循环相当于
for (int i = 0; i < 100; i ++)
;
如果你只有一个语句可以执行循环,你可以避免在for循环中使用花括号(但这是不好的做法)。
如果你添加大括号,你得到:
for (int i = 0; i < 100; i ++) {
;
System.out.print(i + "\n ");
}
正如您所看到的,您只有一个;
,相当于一条nop指令。但是进入循环,所以大括号之间的所有内容都将被执行。
为您提供一点提示:以更好的方式格式化您的代码,以便以清晰的方式查看正在发生的事情。