Java中的布尔人

时间:2013-08-23 17:01:43

标签: java boolean

我是初学者,开始学习java语言。我在书中遇到了一个关于布尔的问题。我不知道如何找到问题的价值,我想知道是否有人可以给我一个代码应该是什么样子的样本。真的很感激帮助。

书中的问题:

假设b的值为false且x的值为0.以下每个表达式的值是什么

a) b && x == 0

b) b || x == 0

c) !b && x == 0

d) !b || x == 0

e) b && x != 0

f) b || x != 0

g) !b && x != 0

h) !b || x != 0

我只是不知道如何执行这个问题,求助! 谢谢

9 个答案:

答案 0 :(得分:4)

如果您在Java中查看Operator Precedence!===的优先级高于&&|| AND和OR)。所以

b && x == 0

只是

b && (x == 0) // --> here x==0 gets evaluated first due to precedence

b && true // (cause x is 0)

由于bfalse,因此最终结果为false

答案 1 :(得分:4)

以下是解决此问题的方法:

  • 回想一下,&&||需要boolean双方
  • 回想一下,!会反转boolean
  • 的值
  • 回想一下二进制操作!===int对转换为boolean s
  • 从右侧开始;决定它是true还是false
  • 将上面一行的结果放在表达式
  • 使用相应逻辑运算符的真值表计算结果。

让我们以您的前几个练习为例:

b && x == 0

您知道bfalse,因此AND的结果立即为人所知:false - 没有必要做其他事情。

b || x == 0

  1. 您知道bfalse,因此OR的结果不会马上知道。
  2. 计算x == 0(值为true
  3. 计算b || true(值为true,因为ORtrue的关系始终为true。)

答案 2 :(得分:2)

查找表达式值的简单方法是将表达式打印到屏幕,在您的情况下:

boolean b = false;
int x = 0;

System.out.println(b && x == 0);   // false
System.out.println(b || x == 0);   // true
System.out.println(!b && x == 0);  // true
System.out.println(!b || x == 0);  // true
System.out.println(b && x != 0);   // false
System.out.println(b || x != 0);   // false
System.out.println(!b && x != 0);  // false
System.out.println(!b || x != 0);  // true

您必须将它放在Java类中并运行它,例如:

public class HelloBoolean {
    public static void main (String args[]) {
        // code comes here ...
    }
}

答案 3 :(得分:1)

  

条件运算符

     

&&和||运算符对两个布尔表达式执行条件AND和条件OR运算。   这些运算符表现出“短路”行为,这意味着仅评估第二个操作数   如果需要的话。

     

&安培;&安培;有条件和

     

||有条件-OR

来自Equality, Relational, and Conditional Operators

  

a)b&& x == 0

&&是有条件的 - 这意味着,只有左操作数为true时才会评估右操作数。 在你的情况下,b是假的,这意味着评估结束,因为false && <anything>永远不会是真的,无论<anything>.

  

b)b || x == 0

||是条件 - 或者,这意味着只有第一个操作数是false才会评估右操作数。
在您的情况下,b为false,因此我们需要评估x==0以获得结果。

答案 4 :(得分:0)

这本书应该解释每个操作的作用。您可以通过以下方式测试结果:

boolean b = false;
int x = 0;
System.out.println(b && (x == 0));

输出应该给你答案真或假。

答案 5 :(得分:0)

b是左侧的表达式时:&&的任何内容都将返回false,因为b为false。

当leftside包含b时 - 只有当右侧的表达式返回||时,每个true才会返回true。否则它将返回false。 / p>

让我们回顾一下你发布的一些例子:

a)b && x == 0 =&gt;评估为false,因为b为假,我们使用&&(AND)

b)b || x == 0 =&gt;评估为true,因为x==0为真,我们使用||(或者)

如果左侧包含!b,则只有当右侧评估为&&时,具有true的任何表达式才会评估为true。如果表达式有||,它就会 无论右侧的表达如何,评估为true

c)!b && x == 0 =&gt;将评估为true:因为双方评估为true

d)!b || x == 0 =&gt;将评估为true:因为双方评估为true

g)!b && x != 0 =&gt;将评估为false,因为&&要求双方都为真,但右侧评估为false

h)!b || x != 0 =&gt;将评估为true,因为左侧评估为true,我们使用OR(||

答案 6 :(得分:0)

因为你正在尝试学习Java,所以启动eclipse并执行以下操作:

public static void main (String args[]) {

    boolean b = false;
    int x = 0;
    if(b || x == 0) System.out.println(true);
    else System.out.println(false);
}

然后你得到答案(至少是第一个答案)。

答案 7 :(得分:0)

首先,“0”在java中不是“假”(与许多其他语言不同)。这是纯粹的。

假设您熟悉主要功能。 请记住使用与其公共类相同的名称保存文件。

在这种情况下BooleansDemo.java

优先规则在此之前的答案中有详细描述。

public class BooleansDemo {
    public static void main(String[] args) {
        Boolean b = false;
        int x = 0;
        System.out.println(b || x == 0);

        System.out.println(!b && x == 0);

        System.out.println(!b || x == 0);

        System.out.println(b && x != 0);

        System.out.println(b || x != 0);

        System.out.println(!b && x != 0);

        System.out.println(!b || x != 0);
    }
}

答案 8 :(得分:0)

首先,您需要了解所涉及的操作员 我们正在与五家运营商打交道。

  1. && Logical Conjunction:如果的操作数均为真,则会产生true
    这可以通过以下真值表给出。

    |   A   |   B   | A && B | 
    +-------+-------+--------+
    | true  | true  |  true  |
    +-------+-------+--------+
    | true  | false |  false |
    +-------+-------+--------+
    | false | true  |  false |
    +-------+-------+--------+
    | false | false |  false |
    
  2. || Logical Disjunction:只要一个或多个的操作数为true,就会生成true的结果。
    这可以通过以下真值表给出。

    |   A   |   B   | A || B | 
    +-------+-------+--------+
    | true  | true  |  true  |
    +-------+-------+--------+
    | true  | false |  true  |
    +-------+-------+--------+
    | false | true  |  true  |
    +-------+-------+--------+
    | false | false |  false |
    
  3. ! Negation在其操作数为false时生成true,在其操作数为true时生成值false。< / em>的
    这可以通过以下真值表给出。

    |   A   |  !A   |
    +-------+-------+
    | true  | false |
    +-------+-------+
    | false | true  |
    
  4. == 等于:出于此问题的目的,它会比较两个数字,如果两个数字相同,则返回true

  5. != 不等于:它是!(A == B)的缩写,,如果是true则返回&&数字相同。

  6. 请注意,||&&都可以从Short-circuit Evaluation中受益(也称为快捷方式评估)。这意味着只有在必要时才会评估第二个操作数(右侧操作数)

    连词false要求两个操作数都为真。它首先评估第一个操作数。如果第一个操作数求值为||,则整个连词为假,并且在评估第二个操作数时没有意义。

    析取true,需要一个操作数为真。它首先评估第一个操作数。如果第一个操作数的计算结果为&&,那么整个析取是正确的,并且在评估第二个操作数时没有意义。

    另请注意,其余三个操作数的优先级高于||b && x == 0。例如,b && (x == 0)a) b && x == 0 // false: b is false, short-circuit applies b) b || x == 0 // true: b is false, x == 0 is evaluated to true c) !b && x == 0 // true: !b is true, and x == 0 is also true d) !b || x == 0 // true: !b is true, short-circuit applies e) b && x != 0 // false: b is false, short-circuit applies f) b || x != 0 // false: b is false, x != 0 is also false g) !b && x != 0 // false: !b is true, however x != 0 is false h) !b || x != 0 // true: !b is true, short-circuit applies 完全相同。但是,评估的顺序仍然存在。

    总结:

    {{1}}