黑马程序员技术交流社区

标题: 有点疑问,求指点 [打印本页]

作者: 田向向    时间: 2012-6-25 14:17
标题: 有点疑问,求指点
本帖最后由 田向向 于 2012-6-25 21:59 编辑

public class FooDemo {   
     static boolean txx(char c)   
     {   
         System.out.print(c);   
         return true;   
     }   
        
     public static void main(String args[])   
     {   
         int i=0;   
         for(txx('a');txx('b')&&(i<2);txx('c'))   
         {   
             i++;  

             txx('d');   
         }   
     }   
}  
这样输出的结果是abdcbdcb,,在i++后面在加上一句 System.out.print(i);后输出结果是ab1dcb2dcb,为什么?请高手指点。
作者: 王明明    时间: 2012-6-25 14:30
本帖最后由 王明明 于 2012-6-25 14:34 编辑
  1. public class FooDemo {   
  2.      static boolean txx(char c)   
  3.      {   
  4.          System.out.print(c);   
  5.          return true;   
  6.      }   
  7.         
  8.      public static void main(String args[])   
  9.      {   
  10.          int i=0;   
  11.          for(txx('a');txx('b')&&(i<2);txx('c'))  
  12. //首先你要明白FOR的运算顺序for(初始化表达式;循环条件表达式;循环后的操作表达式) 根据这个你就知道先输出a b 然后i++ =1 d c b i++ = 2 dcb 最后的b 判断i i=2不满足i<2 所以终止循环      
  13. //首先FOR 运行初始表达式 然后循环条件表达式 然后FOR {}里面的内容 然后循环后的操作表达式 然后循环条件表达式 初始不再运行了...
  14. {   
  15.              i++;  

  16.              txx('d');   
  17.          }   
  18.      }   
  19. }  
复制代码

作者: 李伟    时间: 2012-6-25 16:25
public class FooDemo {   
     static boolean txx(char c)   
     {   
         System.out.print(c);   
         return true;   
     }   
        
     public static void main(String args[])   
     {   
         int i=0;   
        /*for循环先执行第一条语句txx('a),然后再执行第二条语句txx('b')&&(i<2);如果第二条语句为真,
      则执行循环体里面的语句,执行完毕后则执行for里面的第三条语句txx('c'),接下来就不用再执行
      第一条语句了,而是直接执行第二条语句txx('b')&&(i<2);,如果第二条语句还为真,则再执行循环
      体里面的语句,接着再执行第三条语句,然后再执行第二条语句,周而复始直到第二条语句结果是假为止。*/
     
    for(txx('a');txx('b')&&(i<2);txx('c'))
         {   
             i++;  

             txx('d');   
         }   
     }   
}  
这样输出的结果是abdcbdcb,,在i++后面在加上一句 System.out.print(i);后输出结果是ab1dcb2dcb,为什么?请高手指点。
作者: 邵阳    时间: 2012-6-25 16:47
本帖最后由 邵阳 于 2012-6-25 16:50 编辑

public class FooDemo {   
      
     {   
         System.out.print(c);   
         return true;   
     }   
        
     public static void main(String args[])   
     {   
         int i=0;   
         for(txx('a');txx('b')&&(i<2);txx('c'))
                                              //1:这开始运算,txx('a')会调用函数static boolean txx(char c)  ,结果肯定是输出a,
                                                            2: 接着往下走,到同上调用,输出结果为b,返回true
                                                            :3: int i=0 ,所以i<2是true,又知道txx('b')为true,所以true&&true是true
                                                 4:因为是true,执行循环,i++,得i=1,然后打印出1
                                                5:接着到了
txx('d');  调用函数,输出结果是d
                                               6:接着就是for循环,到达
txx('c'),调用输出c
                                               7:接着到达 同样先txx('b'),输出b,txx('b')&&(i<2)返回true值
                                                8:i++,得i=2,打印一次2
                                              9:到达
txx('d');  调用函数打印d
                                              10,:到达txx('c'))  ,调用函数打印c
                                      11:接着到达 txx('b')&&(i<2);同样先txx('b'),输出b,
                                        12:但是此时i=2,此时i<2返回false,txx('b')&&(i<2);返回false,循环结束
                              13:最终结果是ab1dcb2dcb


     
{   
             i++;
        System.out.print(i);

             txx('d');   
         }   
     }   
}            
作者: 张文强    时间: 2012-6-25 17:27
分号第一部分是初始化语句,在for循环前先执行一遍,第二部分是循环的终止控制,当
foo('B')&&(i <2)为false时循环就终止了,第3部分在每次循环完毕时执行
A B D C (第一次)
B D C(第二次)
B(条件不成立)(第三次)




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