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

本帖最后由 涉江 于 2014-9-26 18:03 编辑

刚才在论坛里看到了这样的一段代码:
  1. package com.itheima;

  2. public class Test4
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int i = 0;
  7.                 for(i = 0;i < 10;i ++ )
  8.                 {
  9.                         if(i % 2 == 0)
  10.                         continue;
  11.                         i = i + 1;
  12.                 //        if(i == 5)
  13.                 //        break;
  14.                 }
  15.         System.out.println(i);
  16.         }
  17. }
复制代码
其中注释掉部分,是因为无论有没有这段,运算结构都没有发生改变。
这段代码最后的i是11,但是for语句中i++的最大值不是被限制为9吗?难道是if后的continue,虽然 i < 10 的判断没有成立,但是 i++ 又重新递增一次 然后重新赋值 i = 10,然后计算的 i = i + 1 吗?
  1. package com.itheima;

  2. class Test3
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int x = 1;
  7.                 int count = 0;
  8.                 while(x <= 100)
  9.         //        for(x = 1;x <= 100;x++)
  10.                 {
  11.                         if(x % 6 == 0)
  12.                                 count++;               
  13.                                 x++;
  14.                 }
  15.         System.out.println(count);
  16.         }
  17. }
复制代码
这段代码中,如果最后打印 x 的话,结果会是101,我觉得应该是同一种问题。
这里有点不明白,希望同学们能帮忙解释一下。



评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
第一个,第一次循环i=0,满足i%2==0,执行continue,返回循环,i++,这时i=1,满足i<10,继续循环。
            第二次循环i=1;不满足i%2==0,不执行continue,执行i=i+1,这时i=2,在返回循环,i++,这时i=3,满足i<10,继续循环。
            之后i都是基数,不会满足i%2==0;
            ...
            最后一次循环i=9;不满足i%2==0,不执行continue,执行i=i+1,这时i=10,在返回循环,i++,这时i=11,不满足i<10,结束循环。
            所以输出i=11;
第二个,这个就比较明显了,当x=100时,满足x<=100;所以执行循环里面的x++,这时x=101,才不满足条件退出循环。
            所以输出x=101;

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 很给力!

查看全部评分

回复 使用道具 举报
高泳 发表于 2014-9-24 14:21
第一个,第一次循环i=0,满足i%2==0,执行continue,返回循环,i++,这时i=1,满足i ...

谢谢,也就是说达成第一个条件i%2==0时,continue for语句,否则,执行i=i+1,如果那段没有被我注释掉,就是i=i+1的值为5时,跳出整个循环,打印5,但是因为i+1=5时,i=4 ,此时i%2==0,执行continue,也就是继续i++,而非break,所以被我注释掉的部分不影响最后的结果?
回复 使用道具 举报
高泳 发表于 2014-9-24 14:21
第一个,第一次循环i=0,满足i%2==0,执行continue,返回循环,i++,这时i=1,满足i ...

我取消注释,改成了 if(i ==6)  break;结果果然是6,谢谢帮助。
回复 使用道具 举报
哎呀,来晚了,都被人回答过了。
回复 使用道具 举报
不系之舟王 来自手机 中级黑马 2014-9-26 00:15:48
地板
学习了……
回复 使用道具 举报
2楼回答好详细
回复 使用道具 举报
运行结果为11,从循环条件中我们可以看出当i=9的时候,if语句是不成立的,此时将执行i=i+1;i=10.但是i还在for循环中i要执行i++.变成了11才来判断i是否还小于10.ok
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马