A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田向向 高级黑马   /  2012-6-25 14:17  /  1612 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 田向向 于 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,为什么?请高手指点。

4 个回复

倒序浏览
本帖最后由 王明明 于 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 21:59

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1

查看全部评分

回复 使用道具 举报
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 21:58

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
黄奕豪 + 1
田向向 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 邵阳 于 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 21:56

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
黄奕豪 + 1
田向向 + 1 赞一个!

查看全部评分

回复 使用道具 举报
分号第一部分是初始化语句,在for循环前先执行一遍,第二部分是循环的终止控制,当
foo('B')&&(i <2)为false时循环就终止了,第3部分在每次循环完毕时执行
A B D C (第一次)
B D C(第二次)
B(条件不成立)(第三次)

点评

谢谢  发表于 2012-6-25 21:59
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马