1

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

书中的问题:

假设 b 的值为 false,x 的值为 0。以下每个表达式的值是多少

一个) 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

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

4

9 回答 9

4

如果您查看Java 中的运算符优先级, 并且优先!=级高于and(逻辑 AND 和 OR)。所以==&&||

b && x == 0

只不过是

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

这是

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

并且因为最终结果bfalsefalse

于 2013-08-23T17:05:46.680 回答
4

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

  • 回想一下,&&双方都||需要boolean
  • 回想一下,!反转 a 的值boolean
  • 回想一下二元运算!=并将s 对==转换intbooleans
  • 从右侧开始;决定是truefalse
  • 将上面一行的结果放入表达式中
  • 使用对应逻辑运算符的真值表计算结果。

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

b && x == 0

你知道那bfalse,所以结果AND马上就知道了:它是false- 没有必要做任何其他事情。

b || x == 0

  1. 你知道那bfalse,所以OR不会马上知道 的结果。
  2. 计算x == 0(值为true
  3. 计算b || true(值是true,因为OR-ingtrue总是true)。
于 2013-08-23T17:07:27.200 回答
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 ...
    }
}
于 2013-08-23T17:11:50.170 回答
1

条件运算符

&& 和 || 运算符对两个布尔表达式执行条件与和条件或运算。这些运算符表现出“短路”行为,这意味着仅在需要时才评估第二个操作数。

&& 条件与

|| 条件或

来自等式、关系和条件运算符

a) b && x == 0

&&是有条件的,这意味着,仅当左操作数为 时才计算右操作数true。在您的情况下, b 是错误的,这意味着评估结束,因为false && <anything>无论如何都不可能为真<anything>.

b) b || x == 0

||是条件或,这意味着仅当第一个操作数是 时才计算右操作数false
在你的情况下 b 是假的,所以我们需要评估x==0以获得结果。

于 2013-08-23T17:55:29.990 回答
0

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

  1. && 逻辑连接如果它的两个操作数都为真,则结果。true
    这可以由下面的真值表给出。

    |   A   |   B   | A && B | 
    +-------+-------+--------+
    | true  | true  |  true  |
    +-------+-------+--------+
    | true  | false |  false |
    +-------+-------+--------+
    | false | true  |  false |
    +-------+-------+--------+
    | false | false |  false |
    
  2. || 逻辑析取只要一个或多个操作数为真,就会产生结果。true
    这可以由下面的真值表给出。

    |   A   |   B   | A || B | 
    +-------+-------+--------+
    | true  | true  |  true  |
    +-------+-------+--------+
    | true  | false |  true  |
    +-------+-------+--------+
    | false | true  |  true  |
    +-------+-------+--------+
    | false | false |  false |
    
  3. ! 否定在其操作数为假时产生一个值,在其操作数为真时产生一个值。truefalse
    这可以由下面的真值表给出。

    |   A   |  !A   |
    +-------+-------+
    | true  | false |
    +-------+-------+
    | false | true  |
    
  4. == 等于:对于这个问题,它比较两个数字,true如果两个数字相同则返回。

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

请注意,两者都&&受益||Short-circuit Evaluation(也称为Shortcut 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
于 2013-08-23T20:19:28.580 回答
0

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

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

输出应该为您提供正确或错误的答案。

于 2013-08-23T17:07:41.563 回答
0

b左边的表达式是什么时候:任何带有将返回&&的东西都是假的。falseb

当左侧包含b- every时,仅当右侧的表达式返回时才会返回||(否则它将返回 false)。truetrue

让我们回顾一下您发布的一些示例:

a) b && x == 0 => 将评估为,false因为b是假的,我们使用&&(AND)

b) b || x == 0 => 将评估为true 因为x==0为真,我们使用||(OR)

如果左侧包含!b,则任何具有的表达式只有在右侧&&计算为 时才会计算为。如果表达式具有,则无论右侧的表达式如何,它都会计算为。truetrue||true

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

d) !b || x == 0=> 将评估为true:因为双方都评估为true

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

h) !b || x != 0=> 将评估为,true因为左侧评估为true并且我们使用 OR ( ||)

于 2013-08-23T17:07:44.107 回答
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);
}

然后你就有了答案(至少是第一个)。

于 2013-08-23T17:09:04.587 回答
0

首先,Java 中的“0”不是“假”(与许多其他语言不同)。它是纯整数。

假设你熟悉 main 函数。请记住使用与其公共类相同的名称保存文件。

在这种情况下 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);
    }
}
于 2013-08-23T17:12:42.823 回答