为什么在";"之后无法识别变量?在java中

时间:2015-10-06 13:36:37

标签: java

这段代码可以使用

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来说是独一无二的吗?

3 个答案:

答案 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指令。但是进入循环,所以大括号之间的所有内容都将被执行。

为您提供一点提示:以更好的方式格式化您的代码,以便以清晰的方式查看正在发生的事情。