为什么必须在for循环初始化中声明变量?


11
int v = 0;

for (v; v<2; v++) {
    ...

}

为什么在Java中不允许这样做?

为什么我们必须v在for循环初始化中声明变量?我知道这不是声明,但是Java为什么不允许上述操作?


我们不 for(;;)
dehasi

3
v不允许,因为它不是声明:这是您无法v;在其他地方单独编写的相同原因。
安迪·特纳

不需要增强for循环。
Arvind Kumar Avinash

Answers:


14

如果v在循环之前声明了if ,则应将for语句的第一部分留空:

int v = 0;

for (; v < 2; v++) {
    ...
}

写作没有任何意义v;


6

如果删除v声明中多余的内容(假设v已事先声明),则循环声明有效:

更改为 for(; v < 2; v++)

传统for循环中的所有三个修饰符在Java中都是可选的。

替代示例:

以下与while (true)循环相同:

for (;;) {

}

添加额外的增量:

int j = 0;
for (int k = 0; k < 10; k++, j++) {

}

添加额外条件以终止循环:

int j = 0;
for (int k = 0; k < 10 || j < 10; k++, j++) {

}

声明多个相同类型的变量:

for (int k = 0, j = 0; k < 10 || j < 10; k++, j++) {

}

显然,您可以根据需要混合和匹配其中的任何一个,完全省去了您想要的任何一个。


3

根据java文档

for语句的一般形式可以表示为:

for (initialization; termination; increment) {
    statement(s)
}

...

for循环的三个表达式是可选的

意味着您可以创建for循环并将3个expr中的一些留空。选项之一是int v在循环前声明:

int v = 0;
for(; v<2; v++)

1

您无需在中声明变量ForInit

正如其他人指出的,您可以简单地省略ForInit;。但您也可以在此处使用语句表达式列表。

例如,您可以创建新的类实例,调用方法以及分配/增加/减少变量:

int v;
for (new String(), "".toString(), v = 0, v++;;);

(此示例是荒谬的,但合法的)

但是,不能将这些语句表达式与局部变量声明混合使用。



0

int w = 0;

诠释v;

for(v; v <2; v ++){

}您已在循环之前声明了v,但再次使用时未进行任何初始化。

如果您使用的w已经事先声明和初始化,那么就不会有问题。例如下面的代码,

for(; w <2; w ++){

}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.