编译错误:“不是声明”

时间:2015-02-18 15:31:10

标签: java

public class Hello
{
   public static void main(String args[])
   {
     int i = 1;
     for(i; ;i++ )
     {
        System.out.println(i);
     }      
}

}

我想了解为什么上面的代码会出错:

  

不是(i ;; i ++)

的陈述

3 个答案:

答案 0 :(得分:4)

因为i第一个位置的原始for 不是声明。您可以在Java中的for循环中声明和初始化变量。所以,我认为你想要像

这样的东西
// int i = 1;
for(int i = 1; ;i++ )
{
    System.out.println(i);
}      

如果您需要在循环后访问i,也可以使用

int i;
for(i = 1; ; i++)
{
    System.out.println(i);
}      

甚至

int i = 1;
for(; ; i++)
{
    System.out.println(i);
}      

这由JLS-14.4. The for Statement涵盖(部分)

  

首先执行ForInit代码执行for语句:

     

如果ForInit代码是语句表达式列表(§14.8),则表达式从左到右依次计算;它们的值(如果有的话)被丢弃。

答案 1 :(得分:2)

for语句开头的唯一i没有任何意义 - 这不是一个声明。通常,for循环的变量在for语句中初始化为:

for(int i = 1;; i++) {
    System.out.println(i);
}

这将永远循环,因为没有测试可以突破for循环。

答案 2 :(得分:1)

将for循环更改为:

 for(; ;i++ )

它将循环无限打印i。你的i不是boolean类型,你可以在for循环的条件下放置,for循环的格式如下:

for (init statement; condition; post looping)

所以在你的init语句中,你只有i,这不是一个有效的语句,因此你会从编译器中得到错误。