黑马程序员技术交流社区

标题: 黑马程序员——while和continue的组合趣味和陷阱? [打印本页]

作者: oscar    时间: 2012-3-29 18:39
标题: 黑马程序员——while和continue的组合趣味和陷阱?
今天在做练习的时候发现一个很“有趣”的结果,但是,仔细分析后,你会觉得很有意思。接下来,你不用vs2010或者vs2008进行运行这段程序,而是通过你的分析,看看你分析的结果和运行出的结果一样吗?觉得会让你惊讶!为什么吗呢?
Console.WriteLine("输出从1到9之间不能被7整除的数的总和并求出i的值");
            int sum = 0;
            int i = 0;
            while (i++<=9)
            {
                if (i%7==0)
                {
                    continue;
                }
                sum += i;
            }
            Console.WriteLine(i);
            Console.WriteLine("总和是{0}",sum);
            Console.ReadKey();



Console.WriteLine("输出从1到9之间不能被7整除的数的总和并求出i的值");
            int sum = 0;
            int i = 0;
            while (++i<=9)
            {
                if (i%7==0)
                {
                    continue;
                }
                sum += i;
            }
            Console.WriteLine(i);
            Console.WriteLine("总和是{0}",sum);
            Console.ReadKey();

作者: 杨礼文    时间: 2012-3-29 21:40
i++    是后+类型 也就是先取i 的值计算 计算后 i 的值 变成 i + 1
++i   是先+类型  也就是先取 i +1  后 的值 再 计算

比如 int i = 0, j=0 ,b=2, sum1=0,sum2=0;
sum1 = i ++   +b;
sum2 = ++j +b;

结果:
i = 1;
sum1=2;
j=1;
sum2=3;


作者: 何圣东    时间: 2012-3-29 22:21
大家注意了,这两题的陷阱在于while里的判断语句,如第一题:当i=9时,i++=9,while判断<=9成立,继续循环,在循环内i的值已经是10了,循环完后再在while内判断i++,所以最后第一题i的最后值为11 ! 以上




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