Оператор логического дополнения? - PullRequest
0 голосов
/ 13 сентября 2011

можно ли использовать логический оператор "!" на объекте, который содержит значение 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}

это возможно? если да, предоставьте мне ссылки на этот документ и другие примеры, я нахожу это странным и в то же время интересным

Ответы [ 5 ]

1 голос
/ 13 сентября 2011

Процедура isRemoved только существует для объекта Briefcase, не для массива.Чтобы использовать отрицательную операцию ! , вы должны попробовать что-то вроде следующего

for(BriefCase c: cases) {
    if (!c.isRemoved()) {
        // block of code
    }
}
0 голосов
/ 13 сентября 2011

В этом случае!отрицает значение вызова 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}

[] и.Операторы () имеют одинаковый приоритет.

Оператор индекса [] будет выполняться первым, поскольку строка вычисляется слева направо, получая, таким образом, экземпляр Briefcase, для которого можно вызвать метод isRemoved ().

0 голосов
/ 13 сентября 2011

Я не уверен, что вы оставили индекс в массиве по ошибке или дизайну ... но это точно сработает:

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

где я - индекс.

0 голосов
/ 13 сентября 2011

Это так. boolean - это примитивный тип, но я не вижу ничего странного в использовании !.

0 голосов
/ 13 сентября 2011

Да, вы можете, но не с массивом, как показано в коде, а как !case.isRemoved().

Дело в том, что ! (Отрицание оператора) работает с булевыми операндами.

Пока выражение операнда преобразуется в логическое значение ! , это будет работать.

...