黑马程序员技术交流社区

标题: 代码得到的结果怎么与同学的不一样啊? [打印本页]

作者: 殘遛の丶狳味    时间: 2013-8-17 22:38
标题: 代码得到的结果怎么与同学的不一样啊?
  1. int sum = GetSum();
  2. Console.WriteLine(sum);
  3. Console.ReadKey();

  4. public static int GetSum()
  5.         {
  6.             int sum = 0;
  7.             for (int i = 2; i <= 100; i++)
  8.             {
  9.                 bool b = true;
  10.                 for (int j = 2; j < i; j++)
  11.                 {
  12.                     if (i % j == 0)
  13.                     {
  14.                         b = false;
  15.                     }
  16.                     if (b)
  17.                     {
  18.                         sum += i;
  19.                     }
  20.                 }
  21.                
  22.             }
  23.             return sum;
  24.         }
复制代码
为什么结果是66705

作者: 小天    时间: 2013-8-18 01:26
你的程序运行没有问题
你同学的结果是多少?32489

作者: §風過無痕§    时间: 2013-8-18 14:16
本帖最后由 §風過無痕§ 于 2013-8-18 14:20 编辑

你的意思是不是只要不满足  if (i % j == 0)这个条件的  都执行sum += i;这个操作呀

如果是以上意思的话:把这句  bool b = true; 的位置往下移  试试!
  1. for (int i = 2; i <= 100; i++)
  2. {
  3.      // bool b = true;
  4.      for (int j = 2; j <i; j++)
  5.      {
  6.      bool b = true;
  7.      if (i % j == 0)
  8.      {

  9.           b = false;
  10.      }
  11.      if (b)
  12.      {
  13.           sum += i;
  14.      }
  15. }

  16. }
复制代码



作者: 黑骏马    时间: 2013-8-19 08:55
本帖最后由 黑骏马 于 2013-8-19 09:04 编辑



你的代码,在内层for循环中,第一次满足i%j==0后,b的值变成false,之后不会再改变,if(b){sum+=i}不会被执行,直至内层循环结束,i++后b变为true,再次进入内层for循环,第一次满足i%j==0后,b的值再变成false,不再改变……



根据你的代码的意思,应该把bool b = true;移到内层for循环中:
  1. public static int GetSum()
  2. {
  3.     int sum = 0;
  4.     for (int i = 2; i <= 100; i++)
  5.     {
  6.         //bool b = true;//return 66705
  7.         for (int j = 2; j < i; j++)
  8.         {
  9.             bool b = true;//return 311471
  10.             if (i % j == 0)
  11.             {
  12.                 b = false;
  13.             }
  14.             if (b)
  15.             {
  16.                 sum += i;
  17.             }
  18.         }
  19.     }
  20.     return sum;
  21. }
复制代码
其实代码完全可以简化一下这样写意思更清楚:
  1. public static int GetSum()
  2.         {
  3.     int sum = 0;
  4.     for (int i = 2; i <= 100; i++)
  5.     {
  6.         for (int j = 2; j < i; j++)
  7.         {
  8.             if (i % j != 0)  //这样写意思不是更清楚明白吗?
  9.             {
  10.                 sum += i;
  11.             }
  12.         }
  13.     }
  14.             return sum;//311471
  15.         }
复制代码
2楼小天的结果为什么是32489?比楼主的代码计算的结果还小。






作者: haxyek    时间: 2013-8-19 15:41
主要是不知道楼主题目是啥意思~~还是把贴出来吧啊~

注意 b的值,单步进行调试~




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