2014-10-23 3 views
-1

В моей программе я использую это, если заявление:Java logic || с compareToIgnoreCase

final String single = "single"; 
final String married = "married"; 
//status is equal to what the user inputted, also a string 
if((status.compareToIgnoreCase(single) != 0) || (status.compareToIgnoreCase(married) != 0)){ 
     System.out.println("Does not equate"); 
    } 

, чтобы выяснить, что ввод данных пользователем. Когда статус изменен на «single» или «SINGLE», программа возвращает «Не приравнивает». Почему он отображает строку «не приравнивает», когда статус равен?

+3

'single'! =' Married' ... одно из этих условий HAS to fail ... И я бы подумал, что 'String # equalsIgnoreCase' будет проще ... – MadProgrammer

+0

когда статус« один »' .. .IgnoreCase (замужем) 'не удается – Hetnr

ответ

2

Ваше состояние является взаимоисключающим. Одно из двух условий всегда верно. т.е.: если статус женат, то он не является единым. Если статус одинарный, то он не женат.

Я не совсем уверен, что вы пытаетесь проверить, но более вероятно, условие будет:

if((!status.equalsIgnoreCase(single) && (!status.equalsToIgnoreCase(married))){ 
     System.out.println("Does not equate"); 
    } 
+0

Ох ... спасибо! Я смотрел на это с другой точки зрения – Hetnr

+0

Думаю, мне нужно было очистить мою логику - спасибо за помощь. – Hetnr

0

Ваш логический или вызывает выражение всегда быть true, вам нужен логический and

if ((status.compareToIgnoreCase(single) != 0) && 
    (status.compareToIgnoreCase(married) != 0)) 

или, вы можете применить преобразование и получить де Моргана

if ((status.compareToIgnoreCase(single) == 0) || 
    (status.compareToIgnoreCase(married) == 0)) 
0

Хорошая ссылка на таблицы истинности при использовании логических операторов. http://kias.dyndns.org/comath/21.html Ответ Эрика Б. был хорошим, я просто не мог прокомментировать его.