2014-12-30 5 views
0

Я использую следующее заявление, чтобы вырваться из цикла, когда два условия выполнены:Java и и или оператор не работает

while (true) 
    { 
     if (uAnswer1.equals(answerB1) || uAnswer1.equals(answerB2) 
       || uAnswer1.equals(answerB3)|| uAnswer1.equals(answerB4) 
       && 
       uAnswer2.equals(answerS1)|| uAnswer2.equals(answerS2)){ 
      break; 
     } 

Петли перерывы, когда один или оба & & условий. Тем не менее, я написал код для прерывания цикла ТОЛЬКО, когда оба условия истинны.

Есть что-то не хватает из вышеуказанного заявления? С уважением, Shei7141.

+0

выше код показывает, что 'uAnswer1.equals (answerB4) && uAnswer2.equals (answerS1)' находятся в состоянии 'AND' –

+0

В этом случае' && 'будет иметь приоритет над' || '. @JigarJoshi имеет правильный ответ. – mrres1

+0

Значения 'answerBn' и' answerSn' постоянны во время цикла? – Bohemian

ответ

3

завернуть их в скобках

if ((uAnswer1.equals(answerB1) || uAnswer1.equals(answerB2) 
       || uAnswer1.equals(answerB3)|| uAnswer1.equals(answerB4)) 
&& 
(uAnswer2.equals(answerS1)|| uAnswer2.equals(answerS2))) 

или

даже сделать HashSet правильных ответов и сделать это будет чист и будет эффективным слишком

answers1Set.contains(uAnswer1) && answers2Set.contains(uAnswer2) 
+0

Спасибо, миллион. – Shei7141

0

выше код показывает, что uAnswer1.equals (answerB4) & & uAnswer2.equals (answerS1) в И состоянии

while (true) 
    { 
     if ((uAnswer1.equals(answerB1) || uAnswer1.equals(answerB2) 
       || uAnswer1.equals(answerB3)|| uAnswer1.equals(answerB4)) 

       && 

       (uAnswer2.equals(answerS1)|| uAnswer2.equals(answerS2))){ 
      break; 
     } 
0

в то время как (истинно) { если ((uAnswer1.equals (answerB1) || uAnswer1.equals (answerB2) || uAnswer1.equals (answerB3) || uAnswer1.equals (answerB4)) & & (uAnswer2.equals (answerS1) || uAnswer2.equals (answerS2))) break; }

Смежные вопросы