当以下代码完成执行时,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 = 2
和x = 1 + 1 = 2
,然后迭代再次开始,这次是z = 2 + 2 = 4
和x = 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;
}
我很有信心现在更容易用手追踪,不是吗?