Java-условия (проверка первого условия в условии) - PullRequest
0 голосов
/ 24 февраля 2012
if((x == 5) || (x == 2)) {  
    [huge block of code that happens]  
    if(x == 5)  
        five();  
    if(x == 2)  
        two();  
}

Итак, я проверяю 5 или 2. И есть огромный блок кода, который происходит после 5 или 2. Проблема в том, что тогда я хочу делать разные вещи в зависимости от того, 5 или 2. Я не хотел иметь отдельные условия для 5 или 2 для огромного блока кода (дублирование было бы громоздким). Мне также не понравилось, как я это делал выше, потому что x на самом деле очень долго.

Есть ли способ сказать что-то вроде:

if((x == 5) || (x == 2)) {  
    [huge block of code that happens]  
    if(first conditional was true)  
        five();  
    if(second conditional was true)  
        two();  
}  

Я всегда могу сделать это так, как я делал выше. Просто любопытно, существует ли такая опция.

Ответы [ 4 ]

3 голосов
/ 24 февраля 2012

Если условия большие, некрасивые и гораздо менее приятные, чем x == 5, просто сохраните результаты в boolean:

boolean xWasFive = x == 5;
boolean xWasTwo = !xWasFive && x == 2;
if (xWasFive || xWasTwo) {
  ...
  if (xWasFive) doA;
  else if (xWasTwo) doB;
}
2 голосов
/ 24 февраля 2012

Один из способов, который я могу придумать, заключается в основном в «псевдониме» более длинных логических выражений в условии if:

boolean expr1, expr2;

if (expr1 = (x == 5) | expr2 = (x == 2)) {  
    // huge block of code that happens
    if (expr1) five();
    if (expr2) two();
}

Я использовал оператор без короткого замыкания, чтобы гарантировать назначение expr2.*

0 голосов
/ 24 февраля 2012

Может быть, что-то вроде этого:

final boolean firstCondition = (x == 5);
final boolean secondCondition = (x == 2);

if (firstCondition || secondCondition) {
    // code
    if(firstCondition) {
        // code 
    }
    else if (secondCondition) {
        // code
    }
}
0 голосов
/ 24 февраля 2012

Единственное, о чем я могу думать, это установить флаг для обоих вариантов.Вроде как это:

boolean wasFive = x == 5;
boolean wasTwo = x == 2;

if(wasFive || wasTwo) {  
   [huge block of code that happens]  
   if(wasFive)  
       five();  
   if(wasTwo)  
       two();  
 } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...