A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

用while continue实现计算从1到100之间的除了能被7整除之外所有整数的和。
我编程的代码如下:
  1.             int sum = 0, i = 0;
  2.             while (i < 100)
  3.             {
  4.                 i++;
  5.                 if (i % 7 == 0)
  6.                 {
  7.                     continue;
  8.                 }
  9.                 sum = sum + i;
  10.             }
  11.             Console.WriteLine("和是"+sum);
  12.             Console.ReadKey();
复制代码
运行结果是4315.请问错在哪里?


教程上正确的代码是:
  1.             int sum = 0, i = 0;
  2.             while (i < 100)
  3.             {
  4.                 if (i % 7 == 0)
  5.                 {
  6.                     i++;
  7.                     continue;
  8.                 }
  9.                 sum = sum + i;
  10.                 i++;
  11.             }
  12.             Console.WriteLine("和是"+sum);
  13.             Console.ReadKey();
复制代码
正确的结果是4215.


请问大家我上面那段代码逻辑上是哪里错了?


评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

14 个回复

倒序浏览
本帖最后由 刘建素 于 2012-7-22 22:06 编辑

你的正确.你写的最后+100 而下边儿一个没加100  1到100之间应该存在100

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
我在写这道题目的时候,答案也是4315,我想这是视频教程里的一个小bug吧!相信自己,别人写的不一定是正确的。。。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
while (i < 100)

            {

                i++;

                if (i % 7 == 0)

                {

                    continue;

                }

                sum = sum + i;

            }

你把 i++放到 sum = sum + i;的前面sum就会加100。


while (i < 100)

            {

                if (i % 7 == 0)

                {

                    i++;

                    continue;

                }

                sum = sum + i;

                i++;

            }

循环到99的时候,sum加了99之后,i变成100了,跳出循环了,不会再加到sum里面了

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李东升 于 2012-7-22 22:53 编辑

逻辑错误在于while循环里面i++的时机。上面代码的判断i是否能被7整除判断错误,因为在进循环后,先自加才判断的,那么就是在i=6的时候,能被7整除,而在i=7的时候,sum加了。这个逻辑错误不影响结果的,其实。
至于结果差了100,也在于i++的时机。当i++在sum = sum + i;的前面时,第一次进循环,i=0,i++之后sum = sum + i;加的就是1,最后一次i=99,i++后sum = sum + i;加的就是100,多的100就在这里。
当你i++在累加和后面时候,第一次进来,sum = sum + i;加的是0,然后i++,跟i++在sum = sum + i;加和前面相比,多了这个累加0的循环。然而循环次数一样的,那么,在i=99时候,累加到99就结束了。对比看出了什么?
i++在sum = sum + i;前的时候,把i++在sum = sum + i;后面的累加0一步省略了,换成了累加100的。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李东升 于 2012-7-22 23:05 编辑

上代码你看吧。
  1. int sum = 0, i = 0;
  2.         while (i < 100)
  3.         {
  4.             i++;
  5.             if (i % 7 == 0)
  6.             {
  7.                 continue;
  8.             }
  9.             sum = sum + i;//i=0的时候,这里sum=sum+i时,i等于1
  10.                                       //i=99的时候,这里sum=sum+i时,i=100
  11.         }
  12.                
  13.                
  14.                 /*int sum = 0, i = 0;
  15.         while (i < 100)
  16.         {
  17.             if (i % 7 == 0)
  18.             {
  19.                 i++;
  20.                 continue;
  21.             }
  22.             sum = sum + i;//i=0的时候,这里sum=sum+i时,i等于0
  23.                                       //i=99的时候,这里sum=sum+i时,i=99;
  24.             i++;
  25.         }
  26.         
  27.         System.out.println(sum);*/
  28.         
复制代码
对比看,上面的是从1一直加到100,除去中间的被7整除的。
下面的则是从0一直加到99,结果能不差100么。
我没visual stduio,就用java做了下,除了输出的关键字不一样,别的都一样。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 黑马杨凯 于 2012-7-22 23:09 编辑

题目为用while continue实现计算 [1,100] 的除了能被7整除之外所有整数的和,还是  (1,100)有歧义,个人理解不同,既然他加了1,却没加100,视频错了

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你的是对的 下面的代码 当i=99的时候,判断不能整除7 则运行sum=sum+i 此时 i=99,然后i++,i=100 判断i i=100,跳出循环,所以下面的少加了个100

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
for (int i = 1; i <= 100; i++)
            {
                if (i % 7 == 0)
                {
                  
                    continue;
                }
                sum = sum + i;
            }
            Console.WriteLine(sum);
            Console.ReadKey();

用for循环能省去麻烦,干嘛非要用while

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
传智播客的视频。原来我写对了啊。
回复 使用道具 举报
滔哥 来自手机 黑马帝 2012-7-24 01:28:08
11#
相信自己
来自:黑马程序员训练营论坛 Android客户端来自: Android客户端
回复 使用道具 举报
个人理解:编写代码实现功能,结果很重要,但是思想问题的思路和编程的逻辑更重要。条条大路都能通罗马,但是总有那么一些好走的捷径。
编程也一样,虽然不同的编程方式,不同的代码,实现的功能是一样的。但是,逻辑的慎密,思路的清晰会让程序员自己和维护人员更易读懂更能理解初始编程人员的思路。

所以啊,楼主不要太计较结果,多看看教程上面的思路,毕竟都是编程老鸟们的经验之谈。

这题按一贯的逻辑:

int sum = 0, i = 0;

        while (i < 100)

        {

            i++;//这段代码是判断符合以后进了循环再自加,进while判断和if判断的时候i值已经改变了,如果脑袋不清晰的话,很容易出岔子,把自己搞得头昏脑胀

            if (i % 7 == 0)

            {

                continue;

            }

            sum = sum + i;//i=0的时候,这里sum=sum+i时,i等于1

                                      //i=99的时候,这里sum=sum+i时,i=100

        }

               

               

                /*int sum = 0, i = 0;

        while (i < 100)

        {
            //而教程的这段代码是先判断完是否符合条件,i值并没有改变,判断完了以后再自加,进入下一次循环判断,思路很清晰,很容易理解               
            if (i % 7 == 0)

            {

                i++;

                continue;

            }

            sum = sum + i;//i=0的时候,这里sum=sum+i时,i等于0

                                      //i=99的时候,这里sum=sum+i时,i=99;

            i++;

        }

        

        System.out.println(sum);*/

        
额,在这里不是批评楼主哈,毕竟我也是编程新手。只是说说自己的想法而已,别介意。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你没错,是教程错了。
教程只加到99,100没加就结束循环了,而且一开始还莫名其妙的多加一次0。
我用python试过,也是4315.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
我想起来了,苏坤老师好想说过,一个数到另一个数之间,是指一个数到另一个数减1.
回复 使用道具 举报
李过 发表于 2012-7-26 11:39
我想起来了,苏坤老师好想说过,一个数到另一个数之间,是指一个数到另一个数减1. ...

是看苏坤老师的视频,代码是仿造苏坤那个写的,不是原版
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马