初始化语句
我正在阅读一本Java书,并且遇到了一个有趣的循环。它看起来像这样:初始化语句
for(; (j>0) && (tmp < a[j-1]); j--)
我明白(j>0) && (tmp < a[j-1])
是条件检查和j--
是增量。但是,我没有得到初始化语句的位置。
你的例子中没有初始化语句。这是可选的。
j
可能是在循环之前声明并初始化的。
令人难以置信的快速,+ 1 ... – 2014-10-19 06:31:24
绝对如果op没有得到一个错误 – 2014-10-19 06:32:16
通常情况下,您将在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循环语法)
我这样想的for循环为while循环的一种常见形式,要循环多次的缩写:
int i= 0; // Initialization
while (i< max){ // termination
// Do stuff
i++; // increment
}
这对于了解它与这些陈述确实有帮助。
for(initialization; condition; increment)
它们都不是必须声明for循环。如果需要,可以有一个for循环,如for(;;)
。它会编译没有任何错误。
根据你的问题j已经初始化了一些地方。因此它非常好。
这是'for('在你的情况下,没有 – 2014-10-19 06:32:22
可能的[for循环没有索引声明]的重复后的第一个(http://stackoverflow.com/questions/8208503/for-loop-without-index-declaration ) – 2014-10-19 06:32:40
如果你还没有找到这个,你可能会发现这个有点奇怪:'for(;;)' – Voicu 2014-10-19 06:37:22