【问题标题】:Does a for loop's while section execute each pass or only once in java?for 循环的 while 部分是在 java 中执行每遍还是只执行一次?
【发布时间】:2010-11-09 04:38:50
【问题描述】:

例如,这将是恒定的还是随着每次传递而变化?

for(int i = 0; i < InputStream.readInt(); i++)

【问题讨论】:

    标签: java loops for-loop


    【解决方案1】:
     for(int i = 0;                  // executed once
         i < InputStream.readInt();  // executed before each loop iteration
         i++                         // executed after each loop iteration
        ) {
        ....
     }
    

    【讨论】:

    • 如果您认为我把这一切都破坏了,请随时回滚。 :)
    【解决方案2】:

    第一部分在循环开始之前执行一次。第二部分在每个循环之前检查,如果为真,则执行循环,如果为假,则循环中断。最后一部分在每次迭代后执行。

    【讨论】:

      【解决方案3】:

      它每次都执行。 for 语法是

      的糖
      int i = 0
      while(true)
      {
          if(!(i < InputStream.readInt()))
          {
              break;
          }
          // for body
          i++
      } 
      

      【讨论】:

      • 这不是int i = 0; while(i &lt; InputStream.readInt()) { //for body ... i++ } 的语法糖吗?我猜在功能上是等效的。
      • 我将条件放在 while 正文中,因为问题是关于该语句的,我想尽可能清楚地说明它确实在每个循环中都会执行。
      • 不,不是。你需要一个额外的块 { 围绕你的整个构造 } 因为否则 i 的生命周期会超过循环。
      【解决方案4】:

      当控制流程图实际上是概念的最佳图形表示时。

      http://upload.wikimedia.org/wikipedia/commons/0/06/For-loop-diagram.png

      我认为主要问题是:确实

      i < InputStream.readInt(); 
      

      每次循环迭代都被执行?是的,确实如此。

      在这种情况下,它不会更改任何敏感变量,代码中实际更改的唯一变量是 i,但 InputStream.readInt() 将在每次迭代时运行以进行比较,因此将运行 @987654324再次@InputStream

      类似的东西呢:

      for (int i=0; i < xObj.addOne().parseInt(); i++)
      

      (假设 addOne 方法返回一个大一整数的字符串表示形式)

      如果我像往常一样调用 xObj.addOne(),我的“检查”是否会增加将增加的值? 是的。 并且它会一直递增到下一个循环迭代吗? 是的。

      就像在做

       int x = 0;
       for (int i=0; i < ++x; i++);
      

      这永远不会终止,因为 ++x 总是大于 x(也是 i)

      举个不平凡的例子怎么样?

      int x = 6;
      for (int i=0; i < x--; i++) {
          System.out.print(i+" ");
      }
      

      输出

      0 1 2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多