黑马程序员技术交流社区

标题: 关于for代码块下的if语句跳出的一些疑问? [打印本页]

作者: 涉江    时间: 2014-9-24 13:32
标题: 关于for代码块下的if语句跳出的一些疑问?
本帖最后由 涉江 于 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,我觉得应该是同一种问题。
这里有点不明白,希望同学们能帮忙解释一下。




作者: 高泳    时间: 2014-9-24 14:21
第一个,第一次循环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;
作者: 涉江    时间: 2014-9-24 16:43
高泳 发表于 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 16:44
高泳 发表于 2014-9-24 14:21
第一个,第一次循环i=0,满足i%2==0,执行continue,返回循环,i++,这时i=1,满足i ...

我取消注释,改成了 if(i ==6)  break;结果果然是6,谢谢帮助。
作者: jtshawn    时间: 2014-9-24 17:02
哎呀,来晚了,都被人回答过了。
作者: 不系之舟王    时间: 2014-9-26 00:15
学习了……
作者: 冷冷丶丶    时间: 2014-9-26 00:23
2楼回答好详细
作者: 陈存伟    时间: 2014-9-26 16:30
运行结果为11,从循环条件中我们可以看出当i=9的时候,if语句是不成立的,此时将执行i=i+1;i=10.但是i还在for循环中i要执行i++.变成了11才来判断i是否还小于10.ok




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