【问题标题】:Why is this for loop giving this output?为什么这个 for 循环会给出这个输出?
【发布时间】:2019-12-17 06:23:23
【问题描述】:

为什么输出如下代码:13 15 17

我认为应该是:15 17 19

代码如下:

package com.example.barker;
class dog {
}

public class Bark {
    public static void main(String[] args) {
        Bark o = new Bark();
        o.go();
    }

    void go(){
        int y =7;
        for(int x = 1; x<8; x++) {
            y++;
            if(x>4) {
                System.out.print(++y + " ");
            }
        }
    }
}

【问题讨论】:

  • x=1,y=8 --> x=4,y=11 然后 x = 5, y =13; x = 6,y = 15; x = 6, y =17
  • 您的y 在进入if condition 之前增加4 次,然后在使用++ 打印之前增加一次。一切看起来都不错。

标签: java for-loop


【解决方案1】:

我认为 Anwer 是对的。

我将解释代码的工作原理以便理解。

第一

y=7

x=0

在第一次迭代之后

y=8 (y++;) 和 x=1 (int x = 1;)(不打印,因为 x 不大于 4)

第二次迭代后

y=9 (y++;) 和 x=2 (x++;)(不打印,因为 x 不大于 4)

第三次迭代后

y=10 (y++;) 和 x=3 (x++;)(不打印,因为 x 不大于 4)

第四次迭代后

y=11 (y++;) 和 x=4 (x++;)(不打印,因为 x 不大于 4)

第五次迭代后

y=12 (y++;) 和 x=5 (x++;)

现在 x 大于 4 并进入 System.out.print(++y + " ");

这里写的是 ++y ,表示预增量

即,增加 y 并打印

即,y=13 和 x=6 打印(13)

下一次迭代后

y=14(y++;) 并在打印 y 的值之前执行 ++y IE, y=15 (++y;) 打印(15)

下一次迭代后

y=16(y++;) 并在打印 y 的值之前执行 ++y IE, y=17 (++y;) 打印(17)

所以输出是 13 15 17

感谢和愉快的编码。

【讨论】:

    【解决方案2】:

    更改如下条件,以获得您想要的结果。

    for(int x = 1; x<10; x++) {
                y++;
                if(x>6) {
                    System.out.print(++y + " ");
                }
            }

    【讨论】:

      【解决方案3】:

      我们先来了解一下for循环中发生的操作:

      • y++会在该行代码执行完毕后进行+1操作

      • ++y会先执行+1操作,然后执行剩下的那行代码

      现在,让我们看看 for 循环:

      for(int x = 1; x<8; x++) {
              y++;
              if(x>4) {
                  System.out.print(++y + " ");
              }
          }
      

      对于每次迭代,我们将查看 x 和 y 的值:

      x = 1, y = 7(第一次迭代开始)

      x = 1, y = 8(迭代结束)

      x = 2, y = 8(第一次迭代开始)

      x = 2, y = 9(迭代结束)

      x = 3, y = 9(第一次迭代开始)

      x = 3, y = 10(迭代结束)

      x = 4, y = 10(第一次迭代开始)

      x = 4, y = 11(迭代结束)

      x = 5, y = 11(第一次迭代开始)

      x = 5, y = 12(y++ 行)

      x = 5, y = 13 (x > 4, 正因如此,++y 执行)


      逻辑已经很明显了,但你可以继续自己调试。

      【讨论】:

        【解决方案4】:

        希望这会有所帮助。 来,解释一下:

        y=7 //At Start
        

        当你进入循环时:

        x = 1 and y = 8
        x = 2 and y = 9
        x= 3 and y = 10
        x = 4 and y = 11
        x = 5 // which makes the if condition true
        

        y 将变为 12 并且当它进入 if System.out.print(++y + " ") 它将首先增加然后打印。 因此,它将打印y = 13

        同样,当 x = 6 时,y 将是 14,如果它变为 15,以此类推。

        【讨论】: