黑马程序员技术交流社区

标题: “for循环计算1~100之和”的一点小疑问,请大神解惑 [打印本页]

作者: 怀旧小柯    时间: 2014-7-23 11:42
标题: “for循环计算1~100之和”的一点小疑问,请大神解惑
java菜鸟初次发帖,望论坛大神帮忙解惑,谢谢~~
class NumForHe //利用for循环语句计算1到100之和。
{
public static void main(String[] args)
{
  for(int he=0,x=1;x<=101;he=he+x,x++) //he总和变量,x自增变量。
  {
   System.out.println("he="+he);
  }
}
}

疑问:for循环语句中,为何是x<=101,而不是x<=100?
如果是x<=100的话,最终结果4950,而不是正确的结果5050,刚好差了最后那100。
运行结果如截图:

...


作者: fantacyleo    时间: 2014-7-23 11:51
本帖最后由 fantacyleo 于 2014-7-23 11:52 编辑

x<=100没有问题,你出了for循环再打印he,就是5050了。你在for循环内部,当he加上100后,x自增变成101,判断x<=100为假,不再执行循环体,所以he=5050就打印不出来了。
作者: star5603    时间: 2014-7-23 11:53
一般把和的计算放在循环体中,你这么做,当x<=100时,100加进去了,但是没打印,因为he = he +100后,x+1=101,再判断循环条件不满足,就出去了,没打印加上100的和。
而101的情况就是没打印101的,你应该在循环之外加一个打印,应该就知道了。
作者: 黎志勇    时间: 2014-7-23 11:53
放错位置了。
  1. for (int he = 0, x = 1; x <= 100; x++) {
  2.         he = he + x;// 放这里
  3.         System.out.println(x + ",he=" + he);
  4. }
复制代码




作者: GoodBoy123    时间: 2014-7-23 11:54
你干嘛要把代码这样写呢,你要展示你的技术高强,还是。。。要是面试你这样写肯定被刷下。
作者: 怀旧小柯    时间: 2014-7-23 11:58
fantacyleo 发表于 2014-7-23 11:51
x

噢,明白了。谢谢
作者: 怀旧小柯    时间: 2014-7-23 11:59
star5603 发表于 2014-7-23 11:53
一般把和的计算放在循环体中,你这么做,当x

谢谢,看懂了
作者: 怀旧小柯    时间: 2014-7-23 12:00
黎志勇 发表于 2014-7-23 11:53
放错位置了。

我去试试,谢谢了
作者: 怀旧小柯    时间: 2014-7-23 12:04
GoodBoy123 发表于 2014-7-23 11:54
你干嘛要把代码这样写呢,你要展示你的技术高强,还是。。。要是面试你这样写肯定被刷下。 ...

⊙﹏⊙b汗~~
我是边看毕向东老师的java基础入门视频,边学习写代码。
目前才刚看到for循环,就打算自己写个,然后运行了还出错了。
并不是刻意这样写代码的,学到现在也没学多少东西,没写过几条代码呢,也没有意识到这样写代码不好。
谢谢指出,以后我会多看别人代码,多练习的。
作者: 寻得美好    时间: 2014-7-23 12:09
这个就是for循环的具体的执行顺序了
for(表达式1; 表达式2 ; 表达式3)
{
    执行语句;
}
第一步:表达式1
第二步:表达式2,为假跳出循环,为真则继续
第三步:执行语句
第四步:表达式3
第二步
作者: 怀旧小柯    时间: 2014-7-23 12:17
寻得美好 发表于 2014-7-23 12:09
这个就是for循环的具体的执行顺序了
for(表达式1; 表达式2 ; 表达式3)
{

恩恩,非常感谢~~:)
作者: huanglyhf    时间: 2014-7-23 12:21
第一个循环结束了之后才执行的he=he+x,x++。
作者: 姿_`态    时间: 2014-7-23 12:49
首先要明确的是,你操作的是谁,是用哪个变量求和,然后就是用这个变量求和,需要循环多少次,还有那个变量在控制循环次数,这样就可以很明确了
也就不会出错了。
看你的例子,是用he求1~100和,而he是从0开始的,那么就需要循环101次。那么x就要控制可以循环101次,所以x<=101;
为了方便理解,可以定义一个计数器,来计算一共循环了多少次。
还有如果for循环,太臃肿的话,可以把能放在外边的,就方便外边,当然这是方便理解。
class NumForHe //利用for循环语句计算1到100之和。
{
public static void main(String[] args)
{
int count =1;
int he=0;
   for(int x=1;x<=101;x++) //he总和变量,x自增变量。
   {
    System.out.println(count+++"he="+he);
System.out.println(he=he+x);
System.out.println(x);
   }
}
}

作者: 刘孝泽    时间: 2014-7-23 13:51
位置放错了
作者: doubandddk    时间: 2014-7-23 14:21
楼主的100和101都是用的 <= 结果当然不一样了
作者: 编程学徙    时间: 2014-7-23 14:30
简单的说,新手不会采用你使用的代码风格。。。
作者: lijiang    时间: 2014-7-23 16:37
这代码写的很有挑战性。
作者: 伊甸拾忆    时间: 2014-7-23 17:25
楼主不要写这种浓缩豆腐块代码。
作者: rolling-stone    时间: 2014-7-23 18:14
因为你he放在循环体里面了,把he拿出来,你直接再打印就行,很简单的,楼主写代码注意规范就好.




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