黑马程序员技术交流社区

标题: 初学,求解两个简单小程序执行顺序 [打印本页]

作者: hxianm    时间: 2013-6-4 13:35
标题: 初学,求解两个简单小程序执行顺序
本帖最后由 hxianm 于 2013-6-5 14:53 编辑

小程序一:class lianxi2461
{
        public static void main(String[] args)
        {
                int k,j,s=1;
                for (k=2;k<6 ;k++,k++ )
                {
                        for (j=k;j<6 ;j++ )
                        s=s+j;
                        
                        
                }
                System.out.println("s="+s);
        }
}
和小程序二:

class lianxi2461
{
        public static void main(String[] args)
        {
                int k,j,s=1;
                for (k=2;k<6 ;k++,k++ )
                {
                        s=1; //此处多了这个,结果完全不一样
                        for (j=k;j<6 ;j++ )
                        s=s+j;
                        
               
                }
                System.out.println("s="+s);
        }
}

这两个的区别就是第二个程序for循环中多了一个给S赋值的语句,结果却是完全不一样了前者S=24,后者S=10。本人是初学,希望哪位高手指导一下,说说这两个程序的执行顺序是怎样的。



作者: 赵乐    时间: 2013-6-4 14:07
话说好绕啊,我解释的够详细了


小程序一:class lianxi2461
{
        public static void main(String[] args)
        {
                int k,j,s=1;
                for (k=2;k<6 ;k++,k++ )/ /一、 首先k=2满足<6,执行下面的循环体。   三。k++,k++  k=4 满足<6 执行下面的循环体     五。k++,k++   k=6,不满足,循环结束,s最终赋值为  24
                {
                        for (j=k;j<6 ;j++ )//二、j=2满足<6,执行下面s=s+j;然后s被赋值为1+2=3, 再然后j++ 依次算下去s=15.        四。j=4满足<6 执行s+j = 15+4=19,再j++  j=5,s被赋值为19+5=24.
                        s=s+j;
                        
                        
                }
                System.out.println("s="+s);
        }
}
和小程序二:

class lianxi2461
{
        public static void main(String[] args)
        {
                int k,j,s=1;
                for (k=2;k<6 ;k++,k++ )/ /一、 首先k=2满足<6,执行下面的循环体。   四。k++,k++  k=4 满足 <6  执行下面的循环体     七。k++,k++   k=6,不满足,循环结束,s最终赋值为  10
                {
                        s=1; //此处多了这个,结果完全不一样   二。 s重新赋值为1           注意  s又被重新赋值为1, 等于刚赋值的15被覆盖掉。
                        for (j=k;j<6 ;j++ )//三、j=2满足<6,执行下面s=s+j;然后s被赋值为1+2=3, 再然后j++ 依次算下去s=15.        六。 j=4满足<6 执行s+j = 1+4=5,再j++  j=5,s被赋值为5+5=10.
                        s=s+j;
                        
               
                }
                System.out.println("s="+s);
        }
}

作者: 郑锐    时间: 2013-6-4 14:23
本帖最后由 郑锐 于 2013-6-4 14:25 编辑

第一个程序是这样计算的
1.第一个程序。
外层第一次循环,k=2:内层开始循环:1.j=2,s=1+2=3;2. j=3,s=3+3=6;
                                                 3. j=4,s=6+4=10;4.  j=5,s=10+5=15
                                          此时j++;不满足j<6的条件,内层循环结束。
外层第二次循环,k=4:同上循环步骤,s=24.
此时k++两次,不满足K<6的条件,外层循环结束。所以最终s=24.
第二个程序
外层循环每次开始的时候,S都会被重新赋值为1;
所以你看到的就是最后一次循环结束后s的值,而不是所有循环的和:
k=4:1.j=k=4,s=1+4=5
        2.j=5,s=5+5=10.
所以最终s=10.


                                                   
                                
作者: hxianm    时间: 2013-6-5 14:52
赵乐 发表于 2013-6-4 14:07
话说好绕啊,我解释的够详细了

谢谢!看到S每次循环都被重新赋值1顿时明白。。。哈哈  疏忽了
作者: hxianm    时间: 2013-6-5 14:53
郑锐 发表于 2013-6-4 14:23
第一个程序是这样计算的
1.第一个程序。
外层第一次循环,k=2:内层开始循环:1.j=2,s=1+2=3;2. j=3,s=3+3=6 ...

谢谢!明白了。。
作者: 赵乐    时间: 2013-6-5 17:28
hxianm 发表于 2013-6-5 14:52
谢谢!看到S每次循环都被重新赋值1顿时明白。。。哈哈  疏忽了

呵呵,加油吧,一起努力




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