2012-05-14 4 views
-1

Я столкнулся с проблемой при сравнении логических значений, я хочу, чтобы цикл включался внутри блока, но не входил в блок.Сравнение логических значений

else if (!(keyCompare.contains(compareKey)) || (save == true)) { 
//do something 
} 

здесь !(keyCompare.contains(compareKey) вернется с ошибкой. Я вижу, если у vector keyCompare нет compareKey или если save является true, тогда введите if loop, но его нет.

Где я ошибаюсь?

+6

Я не вижу каких-либо ошибок здесь, должно быть что-то еще. Если save is true, он будет вводить ваш if-блок. Btw, не пишите 'if (save == true)', просто напишите 'if (save)' –

+3

, каково ваше первое условие if? Вы уверены, что он не входит в предыдущую ветку? –

+2

Не могли бы вы показать полное утверждение 'if-else' – wattostudios

ответ

0

Есть три варианта:

  1. Условный или иначе, если блок выше данного выполнения.
  2. Исключение составляет то, что содержится.
  3. Вы ошибаетесь, и оба этих условия являются ложными.

Отладчик точно сообщит вам, какая именно возможность. Здесь нет никакой необходимости в обсуждении - это буквально единственные три возможности.

0

Предположим, у вас есть класс следующим образом:

static class Contents { 
    private String contents; 
    public Contents(String contents) { 
    this.contents = contents; 
    } 
} 

Дать следующий код:

Vector<Contents> v = new Vector<>(); 
v.add(new Contents("a")); 
System.out.println("Contains a: "+v.contains(new Contents("a"))); 

доходность которого следующий вывод:

Contains a: false 

Однако добавление метода equals к класс Contents следующим образом:

public boolean equals(Object obj) { 
    return Objects.equals(this.contents, ((Contents)obj).contents); 
} 

Урожайность вдруг следующий результат:

Contains a: true 

Лучше реализация могла бы выглядеть следующим образом:

@Override 
public boolean equals(Object obj) { 
    if (this == obj) return true; 
    if (obj == null) return false; 
    if (getClass() != obj.getClass())return false; 
    final Contents other = (Contents) obj; 
    if (!Objects.equals(this.contents, other.contents))return false; 
    return true; 
} 
Смежные вопросы