2015-12-11 5 views
2

Можно ли пропустить оператор if и выполнить другой оператор if внутри этого оператора if?Как пропустить оператор if, чтобы перейти к следующему оператору if

if(...){ 
    A code. 
}else if(...){ 
    B. Call to C. 
}else if(...){ 
    C code. 
}else(...){ 
    D code. 
} 

E.g. если я в выражении if, содержащем A, и условия изменяются так, чтобы выполнялся B, как бы я вызывал код в C WHILST в инструкции B else if.

EDIT = Забыл сказать, что мои операторы if, кроме одного, возвращают настраиваемый массив объектов, называемый Dice []. Я реализовал следующие решения и теперь получаю ошибку с заявлением о возврате.

public Die[] ifA(){ 
A 
} 

public void ifB(){ 
ifC(); ifD(); 
} 
public Die[] ifC(){ 
C 
} 
public Die[] ifD(){ 
D 
} 

public Die[] roll(){ 

if(...){ return ifA(); 
}else if(...){ifC();ifD(); 
}else if(...){return ifC();  
}else(...){return ifD(); 
} 

} 

Я просто получаю ошибку возврата в конце метода roll(). Конечно, я не должен, поскольку я использовал блок else {}, поэтому else должен запускаться, если не выполняется if if else else.

EDIT # 2 = Только что нашел способ обхода метода, который не возвратил значение. Спасибо, ребята, за ваш вклад. Сделал мой код намного опрятным и понятным!

+0

Вы можете форматировать код первого ... – OPK

+4

вместо пропуска сделать 'C code' модуль, так что вы можете вызвать его в' заявлении b' или 'C' заявление – gtgaxiola

+1

Нет, если вы не измените их все для отдельных операторов 'if' для всех проверяются на такую ​​ситуацию. –

ответ

6

Вы можете поместить ваш A Code, B Code, C Code и D Code в своих собственных методов, а затем вызвать C Code время в B, если заявление.

Для примера

public void doA() { 
    //Do what would happen in A 
} 
public void doB() { 
    //Do what would happen in B 
} 
public void doC() { 
    //Do what would happen in C 
} 
public void doD() { 
    //Do what would happen in D 
} 

и для если-то-блок

if (...) { 
    doA(); 
} else if (...) { 
    doB(); 
    doC(); 
} else if (...) { 
    doC(); 
} else { 
    doD(); 
} 
+0

Спасибо за ввод. До сих пор я сделал все, и я просто получил обратную ошибку. Я, вероятно, забыл сказать, что мои утверждения if, кроме одного, все что-то вернули. Теперь, когда я сделал свой шаг, я получаю обратную ошибку, но не уверен, что вернуть. Я поместил свои предыдущие операторы if в него индивидуальным методом и поместил блок if-else в метод. Я отредактирую свой пост, чтобы вы могли видеть, что я имею в виду. –

+1

. Вам не хватает некоторых полуколоней после большинства методов 'doX()' –

4

Создать метод для кода С.

if(...){ 
    A code. 
}else if(...){ 
    B 
    cCode(); 
}else if(...){ 
    cCode(); 
}else(...){ 
    D code. 
} 


private void cCode() { 
    ... 
} 
0

Очевидно, что два других ответа более чисты, но просто выбрасывают другой путь.

int condition = 2; 
while(true) { 
    if(condition == 1){ 
     System.out.println(1); 

    }else if (condition == 2){ 
     System.out.println(2); 
     condition = 3; 
     continue; 

    }else if (condition == 3){ 
     System.out.println(3); 

    } 

    break; //if continue gets called it will skip this 
} 
+0

Вы можете изменить это и удалить 'else', чтобы не было необходимости цикл while и 'continue'. – Elipzer

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