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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 涐扪①起奮乧 中级黑马   /  2013-11-20 15:43  /  1301 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 涐扪①起奮乧 于 2013-11-20 21:20 编辑
  1. class  Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                         int x=1;
  6.                         for(System.out.println("a");x<3;System.out.println("c"))
  7.                         {
  8.                                 System.out.println("d");
  9.                                         x++;
  10.                         }        
  11.                 }
  12. }

  13. class  Demo
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                         int x=1;
  18.                         for(System.out.println("a");x<3;System.out.println("c"))
  19.                         {
  20.                                 System.out.println("d");        
  21.                         }
  22.                         x++;
  23.                 }
  24. }
复制代码
对上面两个程序结果是不同的
程序一运行结果:adcdc

程序二运行结果:adcdc........无限循环

感觉第二个程序里面的x++;这句话不写也是无限循环。但对具体的内部执行过程不太了解,还请大家帮忙。

5 个回复

倒序浏览
本帖最后由 ″先森丶玹° 于 2013-11-20 16:35 编辑

for循环机制是这样的:首先解释下普通写法你就理解了,
for(x=1;x<3;x++){syso(x)}
首先x=1进来满足,运行x=1当然不会有打印语句,再来x<3满足,运行syso(x),然后返回x++一次,此时x=2,不会运行x=1,再来判断x<3,满足运行syso(x),再x++一次,此时x=3不满足x<3,循环结束

int x=1;
                        for(System.out.println("a");x<3;System.out.println("c"))
                        {
                                System.out.println("d");
                                        x++;
                        }        

运行顺序:
1、x=1运行 System.out.println("a"),
2、判断x<3 ,满足,运行System.out.println("d");
3、完了x++一次,此时x=2,
4、此时会返回运行System.out.println("c")
5、然后继续第二次循环,x=2,注意此时不会运行 System.out.println("a"),(这里相当于上面x=1,只初始化一次,)
6、判断x<3 ,满足,运行System.out.println("d");
7、之后x++,x=3回去运行System.out.println("c"),
8、x=3不满足x<3,循环结束。

而第二种之所以无限循环是因为x++在for循环体外面,这样就导致了,x=1完了判断x<3,不会执行x++,永远死循环下去。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报 1 0
对于第二个Demo的循环体它的执行顺序是这样的:
先执行代码a:System.out.println("a");判断x<3是否满足,
然后执行代码d:System.out.println("d");  
再执行代码c:System.out.println("c")
因为x的值一直是1,满足x<3这个条件,所以接下来这个程序会一直执行循环体中的代码d和代码c这两条代码。跳不出for循环而形成了一个死循环。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
第一个程序:
①.int x=1 → 进入for循环 → 打印a → 判断条件x<3,条件满足 → 进入循环体,打印d → 执行x++;,此时x=2 → 执行参数更改条件,即打印c    【第一轮循环】
②.int x=2 → x<3条件满足 → 进入循环体,打印d → 执行x++;此时x=3 → 再次执行参数更改条件,打印c     【第二轮循环】
③.此时x=3,已经不满足x<3这个条件了,所以该程序结束,所以最终的打印结果是:adcdc


第二个程序:
结果是无限循环,原因可以分析一下:int x=1 → 进入for循环,打印a → x<3条件满足 → 执行循环体,打印d → 执行循环更改条件,打印c ......到这一步就可以知道了,因为x++;这个自增条件是写在for循环外面的,循环没结束,就执行不到x++;这条语句。而此时x还是等于1,1永远小于3,所以它就会无限的去执行for循环体的内容,所以就不断的打印adcdcdc......

点评

赞一个  发表于 2013-11-20 17:36
回复 使用道具 举报
第二个x++ 已经在for循环之外了, for循环中无法改变x的值,当然就无限循环了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马