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

时间:2020-02-17 14:17:00

标签: java

int v = 0;

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

}

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

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

6 个答案:

答案 0 :(得分:14)

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

int v = 0;

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

只写v;没有意义。

答案 1 :(得分: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++) {

}

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

答案 2 :(得分:3)

根据java doc

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

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

...

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

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

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

答案 3 :(得分:1)

您不必在ForInit中声明变量。

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

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

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

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

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

答案 4 :(得分:0)

增强的for循环不需要它。

public class Main {
    public static void main(String[] args) {
        int[] integers = { 10, 20, 30 };
        for (int x : integers) {
            System.out.println(x);
        }
    }
}

答案 5 :(得分:0)

int w = 0;

int v;

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

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

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

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

}