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

5黑马币
  做作业时遇到了一个棘手的问题。
我反省:学过的东西还是要勤温习,不然会忘的。





我简写了::

class Demo
{
      public static void main(String [] args)
      {
            boolean b,t=true,f=false;
            b=f && f || f && f || f && f || f && f ;
            System.out.println(b);
            //当然结果明显是FALSE,但是我很好奇这个长句是怎么运算的。于是用t替换一些f,然后看答案和我想的是否一样。可是就是不一样的啊。
            //一个多小时就搞这一题了。       大师,详细请教   f && f || f && f || f && f || f && f   的运算顺序。。
      }
}




34 个回复

正序浏览
涨姿势了。。。。
回复 使用道具 举报
&&的优先级大于||,所以会先运算&&
回复 使用道具 举报
很不错啊。
回复 使用道具 举报
本帖最后由 zhengyk 于 2015-1-19 17:38 编辑
  1. class Test
  2. {
  3.         public static class test
  4.         {
  5.                 public static boolean test1(boolean val){
  6.                 System.out.println("test1("+val+")");
  7.                 return val;
  8.                 }
  9.                 public static boolean test2(boolean val){
  10.                 System.out.println("test2("+val+")");
  11.                 return val;
  12.                 }
  13.                 public static boolean test3(boolean val){
  14.                 System.out.println("test3("+val+")");
  15.                 return val;
  16.                 }
  17.         }
  18.         public static void main(String[] args)
  19.         {
  20.                 boolean b=test.test1(true)||test.test2(true)||test.test3(true);
  21.                 System.out.println("expression is "+b);
  22.         }
  23. }
复制代码
参数都传true时:
test1(true)
expression is true
参数都传false时:
test1(false)
test2(false)
test3(false)
expression is false参数都传第二个参数传true时:
test1(false)
test2(true)
expression is true
这里就写了三个参数相或的结果,同理四个或也是一样的。
当前面已判断出true时,后面就不再判断。


回复 使用道具 举报
你应该看看视频!里面教的很详细!
回复 使用道具 举报
package ab.wkq;

public class Test111 {
        public static void main(String [] args)
        {
              boolean b,t=true,f=false;
              b=t && (t ||f) && f || f && f || f && f ;
              System.out.println(b);
             
        }
}
做了一个简单的测试,你可以用括号来证明,证明结果是&&先运行,然后才运行双或
根据优先级问题双与的优先级大于双或。
f && f || f && f || f && f || f && f   的运算顺序。。
先运行f&&f,然后依次运行II两旁boolean值。
回复 使用道具 举报
这是逻辑运算符呀,都是同一级的,从左到右运算0&&0||0&&0||0&&0||0&&0=false,1&&1||1&&1||1&&1||1&&1||1&&1=1
回复 使用道具 举报
&&的优先级高于||,&&两边都为真的时候,结果才为真,否则为假。||表示两边都为假的时候,结果才为假。由于&&优先级高于||,所以在程序中先运行&&,运行完之后再运行||。b=f&&f||f&&f||f&&f||f&&f,f&&f为假,所以就是b=假||假||假||假,假||假=假,所以b=假。当b=t&&t||t&&t||t&&t||t&&t,t&&t=真,b=真||真||真||真,真||真=真,所以b=真。
回复 使用道具 举报
&&的优先级高于||,&&两边都为真的时候,结果才为真,否则为假。||表示两边都为假的时候,结果才为假。由于&&优先级高于||,所以在程序中先运行&&,运行完之后再运行||。b=f&&f||f&&f||f&&f||f&&f,f&&f为假,所以就是b=假||假||假||假,假||假=假,所以b=假。当b=t&&t||t&&t||t&&t||t&&t,t&&t=真,b=真||真||真||真,真||真=真,所以b=真。
回复 使用道具 举报
根据优先级先算&& 再算||  f && f  全部的f&&f 都是false  然后算|| 因为都是false 所以都是false,最后b是false
如果你改成 b=f && f || f && f || f && f || t && t ;  同理 f&&f是false 但是 t&&t是true 最后是false||false||false||true  || 只要有一个为true就是true 所以最后b=true
回复 使用道具 举报
Joseph_liuxh 来自手机 中级黑马 2015-1-3 21:28:18
23#
[quote]cxj 发表于 2014-12-28 00:49
当f=false那样时,你可以把 b=f

这个答案逻辑清晰,回答的很到位
学习了。
回复 使用道具 举报
逻辑运算符的优先级是 !  > &&  > ||  所以  f && f || f && f || f && f || f && f  把两个f&&f的计算是优先的 也就是全部都是false,全部false的或运算自然是false。不过,个人感觉,不需要在意这种东西,毕竟代码是为了表达我们的意图的,能让人一目了然是最好的
回复 使用道具 举报
小徐_y8nUx 来自手机 中级黑马 2014-12-30 10:38:00
21#
我觉得你应该要知道这几个问题的优先级,再去分析,&和双&是不一样的,
回复 使用道具 举报
&&和 ||是短路与和短路或,也就是说从左向右运算,只要有一个条件满足或者不满足即结束
回复 使用道具 举报
shicuf 中级黑马 2014-12-28 22:21:56
19#
伟大领袖马士兵曾经说过,纠结优先级的人都是在无理取闹,根本不用管,用括号就能摆平一切!
回复 使用道具 举报
zhiyi 中级黑马 2014-12-28 18:13:10
18#
本帖最后由 zhiyi 于 2014-12-28 18:16 编辑

情况是这样的,
在Java中逻辑运算符“||”和“&&”优先级相同,结合方向为“从左至右”,你的式子相当于
b=(((((((f && f) || f) && f) || f) && f) || f) && f);

回复 使用道具 举报
zhiyi 中级黑马 2014-12-28 18:11:32
17#
本帖最后由 zhiyi 于 2014-12-28 18:14 编辑

在Java中逻辑运算符“||”和“&&”优先级相同,结合方向为“从左至右”,你的式子相当于
b=(((((((f && f) || f) && f) || f) && f) || f) && f);
由于用的都是短路符,只运算到第一个“&&”就不运算了
回复 使用道具 举报
是不是这样:b=f这就是false了,后边还用看吗?
回复 使用道具 举报
Death、 发表于 2014-12-27 08:57
亲,首先这是短路与,短路或。
再其次短路与的运算顺序大于逻辑或的运算顺序;
f 的话:

学习了.
回复 使用道具 举报
cxj 中级黑马 2014-12-28 00:49:15
14#
当f=false那样时,你可以把 b=f && f || f && f || f && f || f && f ;等价于b=f && *;因为已经有flase了,右边的不参与运算,所有结果为false。。。。同理,当用t将f换掉时,b=t && t || t && t || t && t || t && t ;等价于b=t && t || *;也等价于b = t || *,所有结果为true。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马