黑马程序员技术交流社区

标题: 有趣的小程序,看看大神们能不能一次看出打印结果 [打印本页]

作者: 邹学良    时间: 2013-3-8 20:39
标题: 有趣的小程序,看看大神们能不能一次看出打印结果
  1. class Test2 {

  2. static boolean run(char c) {

  3. System.out.print(c);
  4. return true;
  5. }

  6. public static void main( String[] args) {

  7. int i =0;
  8. for ( run('A'); run('B')&&(i<2); run('C')){
  9. i++ ;
  10. }
  11. run('D');
  12. }
  13. }
复制代码
打印的是什么样的结果呢?
作者: 黑马_位志国    时间: 2013-3-8 20:45
结果是:ABCBCBC
作者: scott0610    时间: 2013-3-8 20:57
本帖最后由 袁见 于 2013-3-8 21:04 编辑

打印的结果是:ABCBCBD
解释:开始执行main方法中的for循环,首先执行for循环的第一个条件,run('A'),此时打印出A ,接下来执行run('B') && (i < 2),打印出B,接下来执行循环体,执行完循环体后,执行for循环的run('C'),此时打印C,接下来在执行run('B') && (i < 2),打印出B,接下来执行循环体,执行完循环体后,执行for循环的run('C'),此时打印C。接下来执行run('B') && (i < 2),首先执行run('B') ,打印出B,再执行 (i < 2),此时发现条件不成了,跳出for循环,执行run('D')。所以最后打印的是:ABCBCBD

作者: 黑马李超    时间: 2013-3-8 21:00
ABCBCBCBCBCBCBC
作者: 移动小坦克    时间: 2013-3-8 21:03
打印结果是ABCBCBD
为了技术分还要说明一下( 尽管你可能知道) 。。。。
for ( run('A'); run('B')&&(i<2); run('C')){
i++ ;
}
这段代码中先走run("A'),然后走run('B')&&(i<2),
然后i++,然后run('C'),这时候i=1;   此时打印是ABC
第2遍的时候就不走run('A')了,
而是走run('B')&&(i<2),先执行run('B'),然后判断因为,i<2,
所以可以执行i++,这时i=2,然后执行run('c'),此时是ABCBC
然后再走run('B'),走完run('B'),判断i是否小于2,
因为i=2,所以不小于2,所以此循环结束,此时是ABCBCB
最后打印最后一行的run('D'),所以最后结果是
ABCBCBD

作者: 黑马17期-闫东东    时间: 2013-3-8 21:29
结果:ABCBCBD
分析:
for ( run('A'); run('B')&&(i<2); run('C'))  
1.首先执行 run('A'); 打印字符A,
2.执行run('B') 打印B 返回true,i=0 满足,i++ i=1;
在 执行run('C')  打印C
3.又执行run('B')&&(i<2) 打印B i=1 满足,i++;  i=2;
4,执行run('C')打印C
5,又执行run('B') 打印B, i=2不满足 i<2;循环停止。
6,执行到run('D'); 打印D
作者: amen0205    时间: 2013-3-9 04:18
本帖最后由 门文通 于 2013-3-9 04:20 编辑

ABCBCBD   
1  打印A  B  
2  i<2  i++  打印CB
3  i<2  i++  打印CB
4  i=2  跳出循环  打印D

认为ABCBCBCB...  的同学  误认为 &&  只要判断 前面为true  就不会计算后面了  这是误区

&&  前面为false  不计算后面   ||  前面为true  不计算后面  要搞清




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