黑马程序员技术交流社区
标题:
关于for代码块下的if语句跳出的一些疑问?
[打印本页]
作者:
涉江
时间:
2014-9-24 13:32
标题:
关于for代码块下的if语句跳出的一些疑问?
本帖最后由 涉江 于 2014-9-26 18:03 编辑
刚才在论坛里看到了这样的一段代码:
package com.itheima;
public class Test4
{
public static void main(String[] args)
{
int i = 0;
for(i = 0;i < 10;i ++ )
{
if(i % 2 == 0)
continue;
i = i + 1;
// if(i == 5)
// break;
}
System.out.println(i);
}
}
复制代码
其中注释掉部分,是因为无论有没有这段,运算结构都没有发生改变。
这段代码最后的i是11,但是for语句中i++的最大值不是被限制为9吗?难道是if后的continue,虽然 i < 10 的判断没有成立,但是 i++ 又重新递增一次 然后重新赋值 i = 10,然后计算的 i = i + 1 吗?
package com.itheima;
class Test3
{
public static void main(String[] args)
{
int x = 1;
int count = 0;
while(x <= 100)
// for(x = 1;x <= 100;x++)
{
if(x % 6 == 0)
count++;
x++;
}
System.out.println(count);
}
}
复制代码
这段代码中,如果最后打印 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