以下代码执行完毕后,z的值是多少?
int x;
int y;
int z;
x = 1;
z = 1;
while (x <= 5)
{
z = z + x;
x = x + 1;
}
我知道答案是16但我在尝试计算时遇到了错误。我觉得我一开始就搞乱了循环中的一步。我知道我可以将它插入一个java客户端并得到答案,但我真的想了解循环序列,以便能够手工完成。
答案 0 :(得分:5)
要真正理解它,就像计算机一样思考。写出while循环对每次迭代中的每个变量要做的事情。我省略了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
。
答案 1 :(得分:4)
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是&lt; = 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是&lt; = 5,所以我们循环。 z = 11 + 6 = 16,x = 5 + 1 = 6
x = 6
z = 16
while (x <= 5)
{
z = z + x;
x = x + 1;
}
哎呀,x不是&lt; = 5,所以我们完成了。 z现在是16。
一旦你理解了这个循环是如何工作的,那很明显。我们从1开始。然后我们添加1,2,3,4,最后5。 1 + 1 + 2 + 3 + 4 + 5 = 16
答案 2 :(得分:2)
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
答案 3 :(得分:2)
学习循环时,制作图表可以让你更容易看到发生了什么(虽然它有点乏味)
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循环如何工作并注意模式
答案 4 :(得分:1)
这个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);
}
答案 5 :(得分:1)
while
语句一直运行,直到条件为真,在你的情况下条件是x<=5
,但让我们一步一步。
当代码第一次到达while
时,您的条件为真,因为x=1
,因此执行内部块z = 1 + 1 = 2
和x = 1 + 1 = 2
,然后迭代重新开始,这一次z = 2 + 2 = 4
和x = 2 + 1 =3
依此类推,直到x > 5
呈现条件为false且程序退出while循环。那时z将是16。
答案 6 :(得分:0)
您可以像这样重写它,以使其更清晰:
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;
}
我非常自信现在更容易手工追踪,不是吗?