2014-11-08 65 views
1
int a= IO.readInt(); 
int b = IO.readInt(); 
int z = 0; 
int i; 
for(i =0; z<=b; i++) { 
    z=z+a; 
} 

System.out.println(i); 

a。)给出以下输入,代码的实际输出是什么? 输入:a读入20,b读入75.循环,麻烦理解循环请帮助初学者

b)。这个代码类似于什么数学运算。

c。这个代码正确实现了你在(b)中确定的操作吗?如果可以的话提供一些测试用例来证明这一点如果没有,请修复代码中的错误。 `

好吧,让我的教授回过头来看,我想知道你们中的任何一个人是否可以解释这段代码中究竟发生了什么。我得到了一个。)是4,但不明白它是怎么样的4.对于数学运算,代码是否类似于我= +加法,那不是接近答案的地方。我需要更好的理解循环,你的帮助将非常感激。

+0

所以你想获得有关for循环的一些信息?或一般循环?一个好的起点是[Java文档:for语句](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html)。 – mattias 2014-11-09 00:02:38

+1

嗨罗伯特,你介意编辑你的问题,告诉我们你的推理是什么,你将如何回答每个问题?一般来说,我们不喜欢做别人的功课,但我相信你可以得到关于你可能做错什么的澄清反馈。如果你完全陷入困境,试着考虑一下这个功能如何随着时间的推移而改变。从时间零点到程序结束的流程是什么?记下每个变量的变化情况,即循环的每次迭代中它们的值是多少?如何测试('z <= b')? – par 2014-11-09 00:04:51

+0

那么如果'b'的答案是'addition''不应该输出'95'而不是'4'? – Tom 2014-11-09 00:07:52

回答

0

输出是循环继续的次数,直到z> b。每做一次简单的z + a添加,你应该明白它是如何执行的

0

好的,这里是我可以给循环的最好的解释,以及你的代码中发生了什么。

首先,要对循环有三个部分。其中,initializerexpressionincrementor,像这样:

for (initializer; expression; incrementor) 

你的初始化,只要你的初始化INT i 0它做它z小于或等于b(z <= b),并且每次执行它时,它将i加1;

您循环将第一个输入添加到z,直到它不再低于b。第一次运行它时,它将z和1加到i。然后它返回到循环的开始,并检查表达式。

因为z仍然小于75,它会再次运行。这使得z = 40和i = 2。同样,z小于75,所以它再次运行。这一次,z是60,而i是3;但60仍然不到75.

我想你可以看到这是怎么回事。这带来了最后的迭代。它又增加了20个到z,另有1个到i。现在z = 80和i = 4.它会检查上一次循环的表达式。由于z大于75,循环终止。这使得i为4的值,而这正是你越来越作为输出

+0

因此,循环运行无限次,直到它达到4? – Robert 2014-11-10 20:46:44

+0

不,它会一直运行,直到表达式返回false,在这种情况下,当'z'大于'75'时。如果'b'改为'95',而'a'保持不变,'i'将会是'5' – Shadow 2014-11-11 00:11:52

0

首先,我将解释如何for循环的作品,然后我会回答你的问题:

for(initialization of variables; condition-testing; increment variables) { 
    statements; 
} 

初始化变量是您经常初始化计数器的地方。在你的情况下,变量i设置为0,i =0

条件测试你测试一个条件是否为真,如果它是真的for循环中的代码正在执行。您的情况是:z < = z + a。如果这不成立不要将您的for循环中执行代码,并跳到右边的for循环,这是你的情况System.out.println(i)

后最后,术后!一次迭代increment variables部分被更新。我的意思是一次迭代是for循环的主体从开始到结束执行。在你的情况下,这是z=z+a。我不能强调在一次迭代之后增量会发生。在你的情况下,i++被执行,这意味着变量i递增1。 i ++与i = i + 1相同。i + 1的旧值。

现在回答您的问题。 a)我将逐步解释发生的事情,并用粗体标出最终答案。

  1. i初始化为0,i=0
  2. z<=b被首次测试,现在Z = 0和b = 75以使条件z<=b认为for循环正在执行中的语句..
  3. z=z+a正在执行的和因为。等号=的右侧总是先评估,然后分配到=符号的左侧。换句话说:z=z+a将看起来像这样z = 0 + 20和新值z = 20
  4. 这是第一次迭代,现在终于i递增。 i++i的值现在是1i = 1
  5. z<=b第二次测试z = 20正如我们在步骤3和b = 75中看到的,所以条件20<=75为真,并执行for循环内的语句。
  6. z=z+a,Z = 20 + 20,用于Z的新值变为40 z = 40
  7. 这是第二次迭代中,i再次由一个i++递增,现在i2i = 2
  8. z<=b第三次评估。 z = 40和b = 75,所以条件成立并且循环正在执行。
  9. Z = Z + A,Z = 40 + 20,用于Z的新值变为60。z = 60
  10. i由1.我递增变为3。i = 3
  11. Ž< = B是用于对第四测试时间,z = 60和b = 75,所以条件成立并执行for循环内的语句。
  12. Z = Z + A,Z = 60 + 20,用于Z的新值变为80。z = 80
  13. i ++在递增,i变为4 i = 4
  14. Ž< = B是用于第5次测试, z = 80和b = 75,这时z不再小于或等于b。 80不等于或小于75.所以for循环中的语句不会被执行。因为我的增量只发生后,在身体的最后一条语句执行成功,我仍然在4

for循环,所以现在正在执行System.out.println(i)后的代码继续。这会打印出i的值,正如你所看到的,我的值在循环中增加到了4。这是打印的价值。

b/c)我并没有完全明白数学运算的意义,但代码的作用相同:舍入75/20。

为了得到一个for循环有很好的理解你也许可以看看这个简单的例子:

for(int i = 0; i<2; i++){ 
System.out.println(i); 
} 

你会看到,这个程序的输出将是:

1 
2 

这是因为它从零开始并在条件i < 2不再为真时停止。作为一个方便的技巧,你可以记住这里的数字number应该是for循环中的迭代次数。 (如果我还初始化为0并加1,你会经常看到)。

+0

所以我只在Z <= b时打印,而我的问题是数学表达是除数操作。我不完全理解此时正在发生的操作,我知道每当它是真实的时候我都会增加,我看到的是当我增加时,Z的值增加20。 – Robert 2014-11-10 20:54:46