黑马程序员技术交流社区

标题: 高手们,解释一下这个简单的问题吧?为什么不是ABCD.. [打印本页]

作者: 飞舞❤心动    时间: 2012-5-26 11:27
标题: 高手们,解释一下这个简单的问题吧?为什么不是ABCD..
public class Test20 {

static boolean foo(char c) {

System.out.print(c);

return true;

}

public static void main(String[] args) {

int i = 2;

for (foo(‘A’); foo(‘B’) && (i < 4); foo(‘C’)) {

i++;

foo(‘D’);

}

}

}

为什么会显示这样,不太懂!
作者: 马林贺    时间: 2012-5-26 12:16

for(int i=0;i<4;i++)
你可以根据我上面写这个for循环看看是for循环是怎么执行的
第一次循环
定义了变量 i
然后判断 i 是不是小于4
然后循环
第二次循环
先让 i++
然后判读 i 是不是小于
小于继续循环

然后看看你写的for循环
for (foo(‘A’); foo(‘B’) && (i < 4); foo(‘C’)) {

i++;

foo(‘D’);

}
我直接给你解释 for 是怎么循环的吧!
for 循环第一次的时候
执行  foo('A') 然后                 打印了 A  

然后执行 foo('B')                  打印了 B

然后判断(i<4)小于 执行循环里的内容

i++ 变成了 3

执行循环里的内容 foo('D')     打印了 D

继续循环

然后执行 foo('C')                 打印了 C

然后执行 foo('B')               打印了 B

判断 (i <4) 小于继续执行

++ 变成了 4

执行循环里的内容 foo('D')     打印了 D

继续循环

然后执行 foo('C')                 打印了 C

然后执行 foo('B')               打印了 B

判断 (i <4) 不小于4 退出循环

结果是 :ABDCBDCB






  











作者: 张晨    时间: 2012-5-26 12:47
for(a;b;c)
{
    d;
}
其实是考for 语句执行顺序:
第一次执行顺序   a(初始化),b(检测条件是否符合) , d(符合则执行语句),c(一般为自增操作,或者也有其他条件)
后面的执行顺序  b(检测条件是否符合) , d(符合则执行语句),c(一般为自增操作,或者也有其他条件)
作者: 武剑峰    时间: 2012-5-26 14:30
本帖最后由 武剑峰 于 2012-5-26 14:37 编辑

for (foo('A'); foo('B') && (i < 4); foo('C')) {i++;        foo('D');}
语句执行的顺序是
1、先进入第一个分号前边的foo('A')    打印出了A     
2、然后进入第二个分号前边第一个分号后边的条件里面判断 foo('B') && (i < 4) 打印出了B,条件为真  
3、进入循环体i=3,并执行foo('D') 打印出了D   
4、然后进入第二个分号后边foo('C')打印出了C  
5、进入第二个分号前边第一个分号后边的条件里面判断 foo('B') && (i < 4) 打印出了B,条件为真  
6、进入循环体i=4,并执行foo('D') 打印出了D  
7、然后进入第二个分号后边foo('C')打印出了C  
8、进入第二个分号前边第一个分号后边的条件里面判断 foo('B') && (i < 4) 打印出了B,条件为假跳出循环,   
最后结果为:ABDCBDCB

如果循环改为:
  for (foo('A'); i < 3; foo('D')) {
   foo('B');
   i++;
   foo('C');
  }
结果就是:ABCD

作者: 飞舞❤心动    时间: 2012-5-26 16:08
马林贺 发表于 2012-5-26 12:16
for(int i=0;i

谢谢了,明白了!
作者: 马林贺    时间: 2012-5-26 16:09
飞舞❤心动 发表于 2012-5-26 16:08
谢谢了,明白了!

没事! 互相学习嘛。




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