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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李燕 中级黑马   /  2013-4-8 22:15  /  2471 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class DemoIf{
        public static void main(String[] args){
                                        boolean b = true;

                        if(b=false)  
                                System.out.println("a");
                        else if(b)
                                System.out.println("b");
                        else if(!b)
                                System.out.println("c");
                        else
                                System.out.println("d");
        }
}
//我以为打印的会是b和d,可是运行一下确实c,求高手指点!

评分

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

查看全部评分

13 个回复

倒序浏览
  if(b=false)  这里应该是==  结果才会是b但是不会出d

else if  是在if挑选过之后剩下的可能性中再进行判断的,所以最下面两个判断无意义

你的程序逻辑是(修改后的):
b是假吗?
如果是输出a
否则(注意,这里的b就只剩下一种可能性了,因为上面的if已经剔除一种情况了)
b是真吗?(此时是的)
如果是输出b(此时输出了b)
再往下的判断b已经没有真假值了

评分

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

查看全部评分

回复 使用道具 举报
你在if(b=false)里相当于给b重新赋了值,b现在是false了,没起到判断的作用,这句话没什么意义,应该是你少写了=号。输出结果就是c了

评分

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

查看全部评分

回复 使用道具 举报
当执行到这句时候  if(b=false)    b就变成true,然后 到  else if(!b)  这句时候才会输出语句、、
if(b=false)   先赋值再判断,实际上可以分两句写
  b=true;
if(b)
//也就是if(b==true){}

下面一个就是我们习惯中的等于了
if (b == true) {}
//如果b的值等于true

评分

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

查看全部评分

回复 使用道具 举报
if(b=false) 成了赋值语句  b已经被赋值成false,之后走的就是c了. 你是想判断是否等于,用 ==,但是改成==的话应该走b,也不会走b,d的

评分

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

查看全部评分

回复 使用道具 举报
你好,
楼上说的很对,

class DemoIf{
        public static void main(String[] args){
                                        boolean b = true;           

                        if(b=false)  //注意:这里用 "="是将 "false"赋值给了"b",    此时b=false;
                                System.out.println("a");       // b=fase,所心没打印
                        else if(b)
                                System.out.println("b");      //b=fase,没打印
                        else if(!b)                                      // "!"代表 取反结果的意思 ,假取了反则变为真, 所以打印了下而一句,
                                System.out.println("c");
                        else
                                System.out.println("d");
        }
}



boolean型只有二种结果,不必要判断这么多次的。

评分

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

查看全部评分

回复 使用道具 举报
class DemoIf{
         public static void main(String[] args){
                       boolean b = true;
                        if(b=false)  //首先:()这里的值只能是Boolean类型的,不管是赋值,还是比较,系统只看结果,那就是假,不执行后面语句
                                 System.out.println("a");
                         else if(b) //上面赋值了,b就是false,也就是if(false),假,不执行后面语句
                                 System.out.println("b");
                         else if(!b)//!b是!false,非假就是真,那么执行后面语句
                                 System.out.println("c");
                         else
                                 System.out.println("d");
         }
}

评分

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

查看全部评分

回复 使用道具 举报
太粗心了吧,   if(b=false)  ,这个应该是==吧,你那是赋值了,先赋值了才判断,所以!b也就是true的时候打印

评分

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

查看全部评分

回复 使用道具 举报
if(b=false)  


这里成了赋值语句了.
应该是 if(b==false)  
if(b=false)   将b的值赋成了 false  那么后面就自然而然的输出不是你期望的结果了!


编程多细心.
从结果来分析为什么.
当你认为逻辑上没有错误却给了不是期望的输出,就要检查语句的问题了.
一步一步来 慢慢就能分析到问题所在.

评分

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

查看全部评分

回复 使用道具 举报
  1. public static void main(String[] args) {
  2.                 boolean b = true;

  3.                 if (b = false) // 这里对b重新赋值
  4.                         System.out.println("a");
  5.                 else if (b)
  6.                         System.out.println("b");
  7.                 else if (!b) // 这里!b为true
  8.                         System.out.println("c");// 这段代码执行
  9.                 else
  10.                         System.out.println("d");
  11.         }
  12. }
  13. // 所以打印结果为c

复制代码
我认为应该是这样,你重新给b进行了附值,b的值就不再是你想象的true,变为了false,所以得不到你想要的结果
回复 使用道具 举报
本帖最后由 董霁辉 于 2013-4-9 00:23 编辑

楼上认为楼主写错了的童鞋们,没有看懂楼主的意思      
                  boolean b = true;

                        if(b=false)  //1 b被重新赋值为false也就是假的;2 if(假的)括号里面已经是假的了,不会打印 a ;只有if()括号里为真,那么才会执行打印a的语句;
                                System.out.println("a");
                        else if(b) //b仍保持假的;
                                System.out.println("b");
                        else if(!b)//"!"是非的意思,"!b"就是非假,那就是true,打印出c 结束if判断;
                                System.out.println("c");
                        else
                                System.out.println("d");
回复 使用道具 举报
if(b=flase)应该写错了改为if(b==flase)否则改变了b
此时b=true的已改为b=flase因此结果为c
回复 使用道具 举报
第一句里if(b=false)将b重新给赋值了,java里==才是数学里面的等于。所以第一句b的值是false,不会输出a。
第二句里面因为由于b被重新赋值成为false,if语句不执行,会跳掉下面的第三个语句。
第三句因为!b等于true,因此执行了该语句输出c。然后结束了循环,不会再执行第四句的else。
回复 使用道具 举报
有收获啦~哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马