日期:2014-05-20  浏览次数:20836 次

请教一个问题,请高手帮忙回答,谢谢
public class FooDemo{ 
static boolean foo(char c) { 
System.out.print(c); 
  return true; 
 } 
 public static void main(String[] args ) { 
  int i =0; 
  for ( foo(’a’); foo(’b’)&&(i<2); foo(’c’)){ 
  i++ ; 
  foo(’d’); 
  } 

}
请问结果为什么是
abdcbdcb
呢?

------解决方案--------------------
foo('a') 属于声明初始化,只开始执行一次
相当于
int i =0;
foo('a');
loop:
if(foo(’b’)&&(i<2)){
i++ ; 
foo('d');
foo('c');
}
所以结果是abdcbdcb;
------解决方案--------------------
要理解这个结果,首先你要之道for循环的工作流程。for循环的工作流程是这样的。首先,执行初始化语句,就是你的程序中的foo('a’),然后,执行循环条件,就是foo('b')&&(i< 2);接着执行for循环体里的内容,最后执行改变循环条年语句,就是foo('c').注意:初始化语句只执行一次。

原理讲完了。现在看一下你的程序:
1.执行初始化打印了 a
2.执行的循环条件,打印了 b
3.执行循环体,打印了d,注意:执行完循环体后i的值是1了。
4.执行循环改变语句,打印了c。
然后再执行循环判断条件,打印了b,因为i等于1,小于2,条件满足,进入循环体,打印d,这时候i等于2了紧接着,执行循环改变语句,打印c,进行循环条件判断,打印了b,但是因为这是i等于了2,不小于2,所以程序等了。

so,打印的结果就是abdcbdcb了。

------解决方案--------------------
进入for循环后首先初始化,即执行foo(’a’)部分,输出a;(这个初始化部分只会执行一次)
然后判断条件,foo(’b’),输出b,并返回true,i<2返回true,所以条件为真,进入for循环里面,执行i++后i 变成1,执行foo(’d’); 输出d;
然后执行改变条件语句foo(’c’),输出c;
再次判断条件,输出b;并进入for循环i的值增1变成2并输出d;
然后又执行改变条件语句foo(’c’),输出c;
再判断条件输出b;发现i<2返回false,所以推出循环;程序结束
古输出结果为abdcbdcb