向我解释一下循环(基本 java)



当以下代码完成执行时,z 的值是多少?

int x;
int y;
int z;
x = 1;
z = 1;
while (x <= 5)
{
  z = z + x;
  x = x + 1;
}

我知道答案是 16,但在尝试计算它时我总是遇到错误。我觉得我一开始就搞砸了循环中的一步。我知道我可以将其插入 java 客户端并获得答案,但我真的在尝试理解循环序列,以便能够手动完成。

要真正理解它,只需像计算机一样思考。写出 while-loop 将在每次迭代中对每个变量执行的操作。我省略了y,因为它似乎没有用于任何事情。

                x |  z | (x <= 5) | z + x | x + 1
               ===+====+==========+=======+======
Initial:        1 |  1 |          |       |     
               ===+====+==========+=======+======
Iteration 1:    1 |  1 | true     |     2 |     2
Iteration 2:    2 |  2 | true     |     4 |     3
Iteration 3:    3 |  4 | true     |     7 |     4
Iteration 4:    4 |  7 | true     |    11 |     5
Iteration 5:    5 | 11 | true     |    16 |     6
Iteration 6:    6 | 16 | false    |       |
               ===+====+==========+=======+======
Final values:   6 | 16 |          |       |

x等于6时,检验x <= 5的计算结果为false,所以我们脱离了循环。现在,在最后,我们可以看到z = 16.

    x = 1;
    z = 1;

好的,x 是 1,z 是 1。

    while (x <= 5)
    {
      z = z + x;
      x = x + 1;
    }

x 小于或等于 5,因此我们执行此操作。我们将 z 设置为 1+1 或 2。我们将 x 设置为 1+1 或 2。

x = 2
z = 2
    while (x <= 5)
    {
      z = z + x;
      x = x + 1;
    }

2 是 <= 5,所以我们循环。 z = 2+2,或 4。 x = 2+1,或 3。

x = 3
z = 4
    while (x <= 5)
    {
      z = z + x;
      x = x + 1;
    }

x 小于或等于 5。现在 z=4+3=7,x=3+1 = 4。

x = 4
z = 7
    while (x <= 5)
    {
      z = z + x;
      x = x + 1;
    }

同样,4<=5,所以 z=7+4=11,x=4+1=5

x = 5
z = 11
    while (x <= 5)
    {
      z = z + x;
      x = x + 1;
    }

5 是 <= 5,所以我们循环。 z=11+6=16, x=5+1=6

x = 6
z = 16
    while (x <= 5)
    {
      z = z + x;
      x = x + 1;
    }

哎呀,x 不是 <=5,所以我们完成了。 z 现在是 16。

一旦你了解了这个循环是如何工作的,它就很明显了。我们从 1 开始。然后我们添加 1、2、3、4,最后是 5。1+1+2+3+4+5=16。

x=1
z=1
while(x is less than or equals to 5) {
z is z + x;
x is x+1
}

这意味着第一个循环将是

z = 1 + 1 = 2
x = 1 + 1 = 2

第二:

z = 2 + 2 = 4
x = 2 + 1 = 3

依此类推,直到 x 为 5

在学习循环时,制作图表可以更容易地看到正在发生的事情(尽管它有点乏味)

z  | x | while (x <= 5) | z + x | x + 1 | new z | new x
=======================================================
1  | 1 | true           |   2   |   2   |   2   |  2        
_______________________________________________________
2  | 2 | true           |   4   |   3   |   4   |  3
_______________________________________________________
4  | 3 | true           |   7   |   4   |   7   |  4
_______________________________________________________
7  | 4 | true           |   11  |   5   |  11   |  5
_______________________________________________________
11 | 5 | true           |   16  |  6    |   16  |  6
_______________________________________________________
16 | 6 | false          |  NA   |  NA   |  NA   |  NA
^ final value

通过编写表,您可以看到值如何随时间变化。一旦达到 false,你就知道 z 的最终值是输出。

此外,您可以开始了解 for 循环的工作原理并注意模式

while语句一直运行,直到条件为真,在您的情况下,条件是x<=5,但让我们一步一步来。

当代码第一次到达while你的条件为真,因为x=1,所以里面的块被执行并z = 1 + 1 = 2x = 1 + 1 = 2,然后迭代再次开始,这次是z = 2 + 2 = 4x = 2 + 1 =3依此类推,直到x > 5使条件为假并且程序退出while循环。此时 z 将为 16。

这个 while 循环是循环的,而 x 小于或等于 5,并且在每次迭代中它都会增加变量 z 和 x 的值。

可以使用调试器逐步查看所有值,也可以修改代码并打印变量中的所有值,如下所示:

int x;
int y;
int z;
int iteration = 1;
x = 1;
z = 1;
while (x <= 5)
{
  z = z + x;
  x = x + 1;
  iteration++;
  System.out.println("Iteration: " + iteration + " Values: x=" + x + " y=" + y + " z=" + z);
}

你可以这样重写它,让它更清楚:

x = 1;
z = 1;
while (x <= 5)
{
  z += x;
  x += 1;
}

Z 在每个循环中递增 x,而 x 递增 1。

换句话说:

z = 1;
for (x = 1; x <= 5; x++)
{
  z += x;
}

我很有信心现在更容易用手追踪,不是吗?

最新更新