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
呢?
3 个解决方案
#1
foo('a') 属于声明初始化,只开始执行一次
相当于
int i =0;
foo('a');
loop:
if(foo(’b’)&&(i<2)){
i++ ;
foo('d');
foo('c');
}
所以结果是abdcbdcb;
相当于
int i =0;
foo('a');
loop:
if(foo(’b’)&&(i<2)){
i++ ;
foo('d');
foo('c');
}
所以结果是abdcbdcb;
#2
要理解这个结果,首先你要之道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了。
原理讲完了。现在看一下你的程序:
1.执行初始化打印了 a
2.执行的循环条件,打印了 b
3.执行循环体,打印了d,注意:执行完循环体后i的值是1了。
4.执行循环改变语句,打印了c。
然后再执行循环判断条件,打印了b,因为i等于1,小于2,条件满足,进入循环体,打印d,这时候i等于2了紧接着,执行循环改变语句,打印c,进行循环条件判断,打印了b,但是因为这是i等于了2,不小于2,所以程序等了。
so,打印的结果就是abdcbdcb了。
#3
进入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
然后判断条件,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
#1
foo('a') 属于声明初始化,只开始执行一次
相当于
int i =0;
foo('a');
loop:
if(foo(’b’)&&(i<2)){
i++ ;
foo('d');
foo('c');
}
所以结果是abdcbdcb;
相当于
int i =0;
foo('a');
loop:
if(foo(’b’)&&(i<2)){
i++ ;
foo('d');
foo('c');
}
所以结果是abdcbdcb;
#2
要理解这个结果,首先你要之道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了。
原理讲完了。现在看一下你的程序:
1.执行初始化打印了 a
2.执行的循环条件,打印了 b
3.执行循环体,打印了d,注意:执行完循环体后i的值是1了。
4.执行循环改变语句,打印了c。
然后再执行循环判断条件,打印了b,因为i等于1,小于2,条件满足,进入循环体,打印d,这时候i等于2了紧接着,执行循环改变语句,打印c,进行循环条件判断,打印了b,但是因为这是i等于了2,不小于2,所以程序等了。
so,打印的结果就是abdcbdcb了。
#3
进入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
然后判断条件,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