int v = 0;
for (v; v<2; v++) {
...
}
为什么在Java中不允许这样做?
为什么我们必须在for循环初始化中声明变量v
?
我知道这不是声明,但是Java为什么不允许上述操作?
答案 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 ++){
}