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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 徐鸿燕 于 2013-3-16 21:06 编辑

求解:下面代码的结果为何是 (A 和 B)?
本题在:毕老师Java基础视频——第10天——第06小节——第4题
  1. public class Demo extends Fu_1{
  2.         public static void main(String[] args) {
  3.                 int i = 0;
  4.                 Fu_1 f = new Demo();
  5.                 Demo d = new Demo();
  6.                 for (f.show('A'); f.show('B') && (i < 2); f.show('C')){//不解
  7.                         i++;
  8.                         d.show('D');
  9.                 }
  10.         }
  11.         public boolean show(char a){
  12.                 System.out.println(a);
  13.                 return false;
  14.         }
  15. }
  16. class Fu_1{
  17.         boolean show(char a){
  18.                 System.out.println(a);
  19.                 return true;
  20.         }
  21. }
复制代码
求解:下面代码的结果为何是 (A 和 B)?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

6 个回复

倒序浏览

回帖奖励 +1

for (f.show('A'); f.show('B') && (i < 2); f.show('C'))
for语句的格式搞清楚就好了执行语句f.show('A'),自然打印A,
判断语句f.show('B') && (i < 2),f.show('B') 返回true,而且打印B,但是i<2返回false,
运算符&& 是同真才返回真,故循环语句结束,退出循环
自然打印 A B

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报

回帖奖励 +1

本帖最后由 黑马-郑玉元 于 2013-3-16 20:44 编辑
  1.     public class Demo extends Fu_1{
  2.             public static void main(String[] args) {
  3.                     int i = 0;
  4.                     Fu_1 f = new Demo();//父类的引用指向子类的对象
  5.                     Demo d = new Demo();
  6.                     for (f.show('A'); f.show('B') && (i < 2); f.show('C')){//因为子类重写了父类的方法,所以实际上调用的是子类的show方法,所以
  7.                                                                                  //打印A和B,执行后返回的是false,&&是短路与运算,
  8.                                                                         //前面的是false,后面的就不会再继续执行了,for循环结束,所以只输出AB.
  9.                             i++;                                             
  10.                             d.show('D');
  11.                     }
  12.             }
  13.             public boolean show(char a){
  14.                     System.out.println(a);
  15.                     return false;
  16.             }
  17.     }
  18.     class Fu_1{
  19.             boolean show(char a){
  20.                     System.out.println(a);
  21.                     return true;
  22.             }
  23.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报

回帖奖励 +1

public class Demo extends Fu_1{
        public static void main(String[] args) {
                int i = 0;
                Fu_1 f = new Demo();
                Demo d = new Demo();
                for (f.show('A'); f.show('B') && (i < 2); f.show('C')){//      1.f.show('A');     3. f.show('B')     5.f.show('B') && (i < 2);  因为返回的是false  所以相当于false&& (i< 2);      
                      i++;                                                                   //                    而 &&运算符  只要符号左边为假  右边就不运算   这时程序就结束了   只打印A B
                            d.show('D');
                }
        }
        public boolean show(char a){       // 2.  输出A  return false   这里的false没有用到
                System.out.println(a);          //4.  输出B  return false     
                return false;
        }
}
class Fu_1{
        boolean show(char a){
                System.out.println(a);
                return true;
        }
}

回复 使用道具 举报
姓名长度不符 发表于 2013-3-16 20:27
for (f.show('A'); f.show('B') && (i < 2); f.show('C'))
for语句的格式搞清楚就好了执行语句f.show('A') ...

嗯,谢谢你的回复,已经理解了。
(f.show('B') 返回false)
回复 使用道具 举报
黑马-郑玉元 发表于 2013-3-16 20:40

理解了,感谢你的解答。
回复 使用道具 举报
郝勇 发表于 2013-3-16 21:01
public class Demo extends Fu_1{
        public static void main(String[] args) {
                int ...

同上,感谢你的解答。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马