我正在阅读一本Java书,我遇到了一个有趣的for循环。它看起来像这样:
for(; (j>0) && (tmp < a[j-1]); j--)
我了解(j>0) && (tmp < a[j-1])
是条件检查,j--
是增量。但是,我没有得到初始化语句的位置。
答案 0 :(得分:2)
您的示例中没有初始化语句。它是可选的。
j
可能在循环之前声明并初始化。
答案 1 :(得分:1)
通常,你会在for循环的第一个语句中初始化j(这里是空的),因为它是一个循环索引,通常只在循环中使用。 Java for循环的标准语法也是for( initialization; termination condition; increment)
,但该语言只强制执行三个语句(中间一个是布尔表达式),因此您可以创建三个空语句for(;;)
一个无限循环或你可以在那里放一些其他语句(除了中间表达式,其中有一个布尔表达式),如for(System.out.println("I was supposed to initialize here"); false && true; logger.log("Nope."))
。当然,你不应该那样做,但这是合法的。
注意:如果代替第三个语句,有些语句也是非法的,比如变量声明,因为它是在每次迭代结束时执行的(有关合法循环语法的更多信息,请参阅this)
我喜欢将for循环视为while循环的常见形式的简写,你想循环多次:
int i= 0; // Initialization
while (i< max){ // termination
// Do stuff
i++; // increment
}
这有助于理解它对这些语句的作用。
答案 2 :(得分:0)
for(initialization; condition; increment)
它们都不是必须声明for循环。如果需要,您可以使用for(;;)
之类的for循环。它将编译没有任何错误。
根据你的问题,j已经初始化了一些地方。因此它非常好。