【问题标题】:Logical Complement Operator?逻辑补码运算符?
【发布时间】:2011-09-13 09:49:44
【问题描述】:

是否可以使用逻辑运算符“!”在具有 true 或 false 值的对象上?专门针对这样的对象?

public class Briefcase {
    private final double amount;
    private final String model;
    private boolean removed = false;
    private String face;

    public Briefcase(double amount, int face, String model) {
        this.face = Integer.toString(face);
        this.amount = amount;
        this.model = model;
    }

    public double getAmount() {
        return amount;
    }

    @Override
    public String toString() {
        return face;
    }

    public String getModel() {
        return model;
    }

    public void remove() {
        removed = true;
        face = "X";
    }

    public boolean isRemoved() {
        return removed;
    }
}

然后像这样使用它

Briefcase[] cases = new Briefcase[];
if (!cases[5].isRemoved()) { .... block of code}

这可能吗?如果是这样,请向我提供该文档和其他示例的链接,我觉得这很奇怪,同时也很有趣

【问题讨论】:

  • 问题是你问的是一个关于array 公文包的问题......而不是单个项目。您如何期望它起作用?
  • 与在这里提出问题并坐下来相比,编码和执行所需的时间更少。为什么不做一个实验主义者?让JDK告诉你正确答案。

标签: java oop boolean boolean-logic unary-operator


【解决方案1】:

例程isRemoved存在于Briefcase对象上,存在于数组中。要使用否定操作 ! 你必须尝试类似下面的操作

for(BriefCase c: cases) {
    if (!c.isRemoved()) {
        // block of code
    }
}

【讨论】:

  • 假设我把它做成了一个对象数组
  • @Andrew,cases 变量一个数组。你也可以写!cases[5].isRemoved()
  • !cases[5].isRemove() 是什么意思?与它的布尔值相反?
【解决方案2】:

是的,你可以,但不是代码中显示的数组,而是!case.isRemoved()

这里的重点是 !(negate operator) 适用于布尔操作数。

只要操作数表达式解析为布尔值 ! 就可以了。

【讨论】:

  • 没有办法也没有逻辑如何将其应用于数组
  • 否定运算符的意思是相反的?如果 case[i].isRemoved 包含 false 这意味着 !false?还是不假?
  • Java Ka 宝贝,为什么是数组?不是应用于数组单个元素的boolean 成员吗?
【解决方案3】:

是的。 boolean 是一个原始类型,但我觉得使用 ! 没有什么奇怪的。

【讨论】:

  • 那是什么意思?你能提供更多的例子吗?除了这个之外还有很多基本的吗?如果我的意思是对象的基本相同用法,而不是原始的
  • 您不能在对象上使用它。 cases[5].isRemoved() 计算为(原始)布尔值,! 应用于结果。就像!anyBoolean(更基本)。正如 Suraj 指出的那样,您可以在表达式中添加一个假想的对子括号。
【解决方案4】:

我不确定您是错误地还是设计地将索引留在了数组中..但这肯定会起作用:

if(!cases[i].isRemoved()){ .... block of code}

其中 i 是索引。

【讨论】:

  • 否定运算符的意思是相反的?如果 case[i].isRemoved 包含 false 这意味着 !false?还是假的?
  • 是的。 "cases[i].isRemoved 包含 false 这意味着 !false" 是正确的
【解决方案5】:

在这种情况下!否定调用 isRemoved() 的值 您可以在这里查看运营商列表:http://www.java-tips.org/java-se-tips/java.lang/what-is-java-operator-precedence.html

还有关于你不能写的答案:

Briefcase[] cases = new Briefcase[];
if (!cases[5].isRemoved()) { .... block of code}

[] 和 . () 运算符具有相同的优先级。

[] 索引运算符将首先执行,因为该行是从左到右评估的,因此检索一个公文包实例,您可以在该实例上调用 isRemoved() 方法。

【讨论】:

    猜你喜欢
    • 2020-12-20
    • 1970-01-01
    • 2017-09-08
    • 2011-09-23
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多