大家看看这题的答案是什么,说说理由
1. public class Test {
2. static boolean foo(char c) {
3. System.out.print(c);
4. return true;
5. }
6. public static void main( String[] argv ) {
7. int i =0;
8. for ( foo('A'); foo('B')&&(i<2); foo('C')){
9. i++ ;
10. foo('D');
12. }
13. }
14. }
1. public class Test {
2. static boolean foo(char c) {
3. System.out.print(c);
4. return true;
5. }
6. public static void main( String[] argv ) {
7. int i =0;
8. for ( foo('A'); foo('B')&&(i<2); foo('C')){
9. i++ ;
10. foo('D');
12. }
13. }
14. }
ABDCBDCB要理解为什么就要弄清楚for循环的运行机理了。
首先我们知道这里for循环执行两次,第三次退出。第一次,首先执行foo('A')为初始化,打印出A在执行foo('B')&&(i <2)打印出B,第一次for不会执行 foo('C'),就行for(i=0;i<2;i++)中第一次不会执行i++一样。所以接下来执行 foo('D'); 输出D。然后是执行foo('C')),输出C。
接下来做第二次for循环,这次for循环不会执行初始化工作了,当然就不执行foo('A')。所以,然后就执行foo('B'),输出B。然后是执行foo('D')输出D,然后执行foo('C'),输出C
第三次,当判断到foo('B')&&(i <2)的时候因为i=2了,所以先输出B后退出循环。理解for循环的执行步骤就不难解决此问题。注重基础的学习。
A. ABDCBDCB
B. ABCDABCD
C. Compilation fails.
D. An exception is thrown at runtime.我想华为的面试题目不会这么简单,所以我不敢确信我的答案
循环体语句;
表达式1:初始表达式,用于在循环开始前,为循环变量设置初始值。 说的是这个初始化。与对象 没有关系。
表达式2:循环控制逻辑表达式,他控制循环执行条件,决定循环次数。
表达式3:循环控制变量修改表达式。
执行:表达式1,表达式2,循环体语句,表达式3,表达式2,循环体语句,表达式3,表达式2(false).
又进来了,回答你的问题吧
执行 for( foo('A'); foo('B')&&(i <2); foo('C'))执行这个for循环,就像执行for(i=0;i<2;i++)一样i=0只是初始化工作,只执行一次,与之对应的foo('A')只执行一次,而foo('A')当然是方法调用了。
体会一下吧