黑马程序员技术交流社区

标题: while-continue的问题 [打印本页]

作者: 狱之一族    时间: 2013-3-26 21:48
标题: while-continue的问题
用while continue实现计算1到100之间的除了能被7整除之外所有整数的和。      

   static void Main(string[] args)
        {
            int i = 0, sum = 0;
            while (i< 100)
            {
                if (i % 7 == 0)
                {
                    i++;
                    continue;
                }
                sum += i;
                i++;
            }
            Console.WriteLine(sum);
            Console.ReadKey();
        }
        
      





static void Main(string[] args)
        {
            int i = 0, sum = 0;
            while (i++< 100)
            {
                if (i % 7 == 0)
                {
                    
                    continue;
                }
                sum += i;
               
            }
            Console.WriteLine(sum);
            Console.ReadKey();
        }
        
我在视频上看的,下面那个也是老师讲的方法,但是我试验过后,不知道哪个错了,两个结果最后却不一样,第一的结果是4215,而第二个的结果是4315,求帮忙

作者: 许庭洲    时间: 2013-3-26 22:21
1.  while (i< 100) //没有将100计算在内,所以第一的结果是4215
2.  while (i++< 100)//判断完之后,i的值变为100,由于100不能被7整除,所以将100计算在内,从而第二个的结果是4315
作者: 罗海云    时间: 2013-3-26 22:26
本帖最后由 罗海云 于 2013-3-26 22:28 编辑

  while (i++< 100)
判断这儿有点讲究,
举例吧.
i++   在i所在的表达式中使用i的当前值后,让i加1
++i   预先在i基础上加1,然后在i所在的表达式中使用i的新值
这样应该就明了了.
而且上面楼上说的前一个问题...就是while(i < 100)...没有把100算进去.应该设置成while(i <= 100)
作者: 狱之一族    时间: 2013-3-26 22:36
罗海云 发表于 2013-3-26 22:26
while (i++< 100)
判断这儿有点讲究,
举例吧.

可是算的时候是从0开始的啊,那第一个和第二个区别在哪啊?
作者: 庞登升    时间: 2013-3-26 22:43
4315-4215=100
上面那个while(i< 100)没有包括100这个数字。就少了100啊。。。2L的有点节操,给小弟们留点分。。。{:soso_e113:}
作者: 罗海云    时间: 2013-3-26 22:48
static void Main(string[] args)
        {
            int i = 0, sum = 0;
            while (i< 100) // 我们假设这儿i==99; 成立向下执行.
            {
                if (i % 7 == 0)
                {
                    i++;
                    continue;
                }//应该不成立...下面.
                sum += i; // 这儿就加了99.
                i++; // 然后才自增.回去就不成立.退出了.
            }
            Console.WriteLine(sum);
            Console.ReadKey();
        }
        
      





static void Main(string[] args)
        {
            int i = 0, sum = 0;
            while (i++< 100) // 然后这儿呢.还假设99. i++的执行顺序是先执行表达式然后自增一.99<100成立...然后i自增1. i= 100.
            {
                if (i % 7 == 0)
                {
                    
                    continue;
                }
                sum += i; // 到这儿就是100了...这儿就可以把100加上.....懂了吧
               
            }
            Console.WriteLine(sum);
            Console.ReadKey();
        }

作者: DWC_5101    时间: 2013-3-26 22:50
第一个while里面的代码,只执行了i从0到99;
第二个while里面的代码,则执行了i从1到100;
因此,第二个符合要求,结果正确。
作者: 许正龙    时间: 2013-3-27 09:37
while (i++< 100)
为后加加,判定以后i在自增1,当i=0时,条件成立,进入while下面的循环是i已经自增1了;同理,当=99时,条件成立,i自增,进入循环中的值是100.
所以第一个循环中计算器i在循环中是0到99
第二个循环中的计算器i在循环中是1到100.
两者之和相差100.
作者: 张振    时间: 2013-3-27 11:41
这个我自己试过 甚至我用数学公式直接加 结果是4315,视频上那个4215结果是错,因为得出4215的代码中的for 循环最后100没加上,因为i<100




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