黑马程序员技术交流社区

标题: 求助啊,结果怎么会这样 [打印本页]

作者: 天邃任我桓    时间: 2014-8-11 00:58
标题: 求助啊,结果怎么会这样
本帖最后由 天邃任我桓 于 2014-8-14 16:19 编辑


大家看看我的代码,i不是已经限定小于等于10,它为什么还会运行到11,而且得出的结果又这么莫名其妙,求解释!谢谢各位!PS新人发帖,有什么不对的请帮忙指出,谢谢!

作者: 狐狸FMF    时间: 2014-8-11 01:22
你的i++;放的位置太靠前了 应该放在sum=sum+i;的后边.你这样i的10的时候while循环是true,然后直接i++;i就等于11了。同理你第一个i值先i++;进入if中的值是2,所以最后输出的结果是2到10的和
作者: weity    时间: 2014-8-11 06:43
第一次i=1,进入循环后i++,i变为2,sum=sum+2,。。。
最后一次i=10时,进入循环后i++,变成11,打印输出“cuowu”
所以结果应该是sum=54,i为11

你要求和代码改为:
int sum=0,i=1
while(i<=10){
sum+=i;
i++
}
System.out.println("sum="+sum+"i="i);//i跳出循环,值为11
作者: 冒牌高手    时间: 2014-8-11 08:26
根据流程看的话第一次的i就已经为2了,把i++的位置放到sum之后就行。i当然会运行到11,但是不会进入到while循环中,所以你写的if语句是个废语句,根本执行不到。
作者: 喜爱    时间: 2014-8-11 09:10
将i++放置于while循环的后,应该就没有这样的问题了,按照你放的位置,当i==10的时候,while循环是成立的,会继续向下执行,这个时候执行到i++,最后导致i是等于11的!
作者: jeromechen    时间: 2014-8-11 13:22
sum+=i;
i++
不然开始循环的话i就等于2了,i++位置太靠前了
作者: 瀚玉    时间: 2014-8-11 13:27
把i++放在sum=sum+i的下面,把if()语句放在i++的下面
作者: 天邃任我桓    时间: 2014-8-11 15:20
好的,解决了,谢谢各位啊:handshake
作者: 天邃任我桓    时间: 2014-8-11 15:40
冒牌高手 发表于 2014-8-11 08:26
根据流程看的话第一次的i就已经为2了,把i++的位置放到sum之后就行。i当然会运行到11,但是不会进入到while ...

我其实就是想看看,他到底执行到哪里了,所以才这么写的,谢谢啊!:handshake
作者: 孙雯    时间: 2014-8-11 17:21
因为 i 的自增位置太靠前,所以还没来得及进行判断就直接将 i 加1了,而在 i 的值为10继续循环的时候仍然会先加1再判断。而 i 实际的累加值是2~10,最后输出为11.
作者: 魏诚东    时间: 2014-8-11 18:16
i++靠前了。
作者: hanchun776    时间: 2014-8-11 19:15
eclipse就是好呀
作者: lhf_java    时间: 2014-8-12 00:22
又学习到知识了.
作者: weity    时间: 2014-8-12 06:52
求结帖,只有楼主结贴了,俺的回答才能有技术分加。。。赶着42期,帮帮忙咯




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2