【问题标题】:Initialization statement初始化语句
【发布时间】:2014-10-19 06:29:13
【问题描述】:

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

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

我知道(j&gt;0) &amp;&amp; (tmp &lt; a[j-1]) 是条件检查,j-- 是变量的减少。但是,我不明白初始化语句在哪里。

【问题讨论】:

  • 在你的情况下,它是for( 之后的第一个,没有
  • 如果你还没有发现,你可能会在某个时候发现这个奇怪的东西:for (;;)
  • j-- 是减量,而不是增量。

标签: java for-loop


【解决方案1】:

您的示例中没有初始化语句。这是可选的。

j 可能在循环之前被声明和初始化。

【讨论】:

    【解决方案2】:

    通常,您会在 for 循环的第一条语句中初始化 j(此处为空),因为它是一个循环索引并且通常只在循环内部使用。此外,Java for 循环的标准语法是for( initialization; termination condition; increment),但该语言只强制要求有三个语句(中间一个是布尔表达式),所以你可以有三个空语句for(;;),这会创建一个无限循环或您可以在其中放置一些其他语句(除了需要布尔表达式的中间表达式),例如for(System.out.println("I was supposed to initialize here"); false &amp;&amp; true; logger.log("Nope."))。当然,你不应该这样做,但这是合法的。

    注意:有些语句如果代替第三条语句也是非法的,例如变量声明,因为它在每次迭代结束时执行(有关合法 for 循环语法的更多信息,请参阅this

    我喜欢将 for 循环看作是一种常见形式的 while 循环的简写,您希望在其中循环多次:

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

    这有助于理解它对这些语句的作用。

    【讨论】:

      【解决方案3】:
      for(initialization; condition; increment)
      

      它们都不是声明 for 循环的必要条件。如果你愿意,你可以有一个像 for(;;) 这样的 for 循环。它将编译没有任何错误。

      根据您的问题, j 已经在某个地方进行了初始化。所以完全没问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 2018-04-28
        • 1970-01-01
        相关资源
        最近更新 更多