没有初始化的for循环

J. *_*Doe 5 java for-loop

我想知道为什么我不能在java中使用带有预定义变量的for循环。

我多次尝试用谷歌搜索它,我能找到的只是 for 循环,根本没有初始化变量,基本上人们解释了这是如何可能的: for(;;) 但这只创建了一个 while 循环。

int x = 0;   
for (x; x < 5; x++) {

}
Run Code Online (Sandbox Code Playgroud)

上面的代码只是给出了错误消息“不是语句”。它要求我改为写:

int x = 0;   
for (int i = x; i < 5; i++) { 

}
Run Code Online (Sandbox Code Playgroud)

为什么我不能在 for 循环中使用变量?

Har*_*ner 9

正如 Globgett 在评论中指出的那样,你想做的事情可以通过使用来实现

int x = 0;   
for (; x < 5; x++) {

}
Run Code Online (Sandbox Code Playgroud)

编译器会抱怨,因为 in for(A; B; C), AandC必须是语句,并且B必须是布尔表达式。Your Ais just x,这是一个表达式,但不是一个陈述。

有关语句和表达式之间差异的更多信息,请参阅此处:What is the Difference Between an expression and a statements in Java?


Mon*_*kry 5

它与语法本身有关,需要由逗号分隔的三个部分,如果不想初始化,则可以按如下方式声明它

在这里您通知编译器忽略循环中的初始化部分

int x =0;        
    for(;x<10;x++){
      System.out.println(x);
    }
Run Code Online (Sandbox Code Playgroud)

您还可以忽略停止条件,在这种情况下,如果不添加停止条件,它将进入无限循环

int x =0;
        for(;;x++){
          System.out.println(x);
          //stoping condition
          if(x>9){
            break;
          }

        }
Run Code Online (Sandbox Code Playgroud)

循环的第三部分相同

int x =0;
for(;;){
  System.out.println(x);
  //stoping condition
  if(x>9){
    break;
  }
  x++;      
}
Run Code Online (Sandbox Code Playgroud)