2017-01-23 2 views
4

Есть ли когда-нибудь случай, когда:логическая эквивалентность еще, если в

if (condition) { 
    statement 
} else { 
    if (condition2) { 
     statement 
    } else { 
     statement 
    } 
} 

не эквивалентно:

if (condition) { 
    statement 
} else if (condition2) { 
    statement 
} else { 
    statement 
} 

Если есть случай, я изо всех сил, чтобы найти дело. Если кто-либо знает пример встречного примера или если он определенно эквивалентен, ваш вклад будет с благодарностью.

+2

Нет, эти два утверждения эквивалентны. – SarTheFirst

+0

@SarTheFirst Пожалуйста, прочитайте [Что делать, если кто-то отвечает на мой вопрос] (http://stackoverflow.com/help/someone-answers) – CKing

+0

Только когда кто-то приходит позже и ошибочно редактирует ваш плохо сшитый код. –

ответ

2

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

if (condition) { 
    statement 
} else { 
    perform some common steps. 
    if (condition2) { 
     statement 
    } else { 
     statement 
    } 
} 
0

Нет, они всегда точно эквивалентны.

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

Контраст с:

if (condition) { 
    statement 
} else { 
    String foo = "bar"; 
    if (condition2) { 
     statement 
    } else { 
     statement 
    } 
} 

Теперь блок делает что-то в дополнение к одной if в вашей версии, и поэтому все разошлись.

Но так как ваша версия не имеет ничего кроме if, они точно такие же.

1

Обе условные структуры равны.

В первом случае у вас есть больше вариантов, например, вы можете выполнить какой-либо код для случая, когда либо второй, либо наоборот, становится истинным, что блок должен выполнить.

if (condition1) { 
    ... 
} else { 
    ... 
    if (condition2) { 
     ... 
    } else { 
     ... 
    } 
    ... 
} 

Но сначала проще читать.

В качестве альтернативы вы также можете использовать переключатель, который более эффективен по эффективности.

+0

Не первый из них менее эффективен, чем второй из-за того, как работают процессоры? –

0

скобки после того, как остальные являются ненужным, так как после этого есть одна инструкция (второй, если), так что если вы не разобрать файл Java по какой-то причине после этого не должно быть ни одного случая, в котором они разные в любом контексте

0

Условие является истинным или ложным. Есть только четыре варианта: четыре условия. В обоих случаях будет выполнено одно из трех утверждений, и в обоих случаях будет одинаково, так как вы можете попробовать все четыре варианта. Таким образом, даже если утверждение повлияло бы на условие, это не повлияет. Поэтому я уверен, что это эквивалентно.

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