2014-10-19 120 views
0

我正在阅读一本Java书,并且遇到了一个有趣的循环。它看起来像这样:初始化语句

for(; (j>0) && (tmp < a[j-1]); j--) 

我明白(j>0) && (tmp < a[j-1])是条件检查和j--是增量。但是,我没有得到初始化语句的位置。

+0

这是'for('在你的情况下,没有 – 2014-10-19 06:32:22

+0

可能的[for循环没有索引声明]的重复后的第一个(http://stackoverflow.com/questions/8208503/for-loop-without-index-declaration ) – 2014-10-19 06:32:40

+0

如果你还没有找到这个,你可能会发现这个有点奇怪:'for(;;)' – Voicu 2014-10-19 06:37:22

回答

2

你的例子中没有初始化语句。这是可选的。

j可能是在循环之前声明并初始化的。

+0

令人难以置信的快速,+ 1 ... – 2014-10-19 06:31:24

+1

绝对如果op没有得到一个错误 – 2014-10-19 06:32:16

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循环语法)

我这样想的for循环为while循环的一种常见形式,要循环多次的缩写:

int i= 0;  // Initialization 
while (i< max){ // termination 
    // Do stuff 
    i++;    // increment 
} 

这对于了解它与这些陈述确实有帮助。

0
for(initialization; condition; increment) 

它们都不是必须声明for循环。如果需要,可以有一个for循环,如for(;;)。它会编译没有任何错误。

根据你的问题j已经初始化了一些地方。因此它非常好。