2016-04-12 2 views
0

У меня есть код, написанный ниже, который довольно много, если оператор вложен в другой, поэтому при запуске кода ниже, если инструкция first if неверна, вложенные операторы if также не будут выполняться.Вложенное заявление If

Я знаю, что это означает, что вы не в состоянии сделать 2-ю, если утверждение верно, но мой вопрос прост:

ли второе, если утверждение верно, но игнорируется из-за 1-го, если заявление является ложным или является 2-й, если утверждение ложно вообще?

Код для моего вопроса ниже:

int temperature; 
myWindow.clearOut(); 
temperature = Integer.parseInt(myWindow.readIn()); 
if (temperature >= 18) { 
    myWindow.writeOutLine(temperature + " is greater than or equal to 18"); 
    if (temperature % 2 == 0) 
     myWindow.writeOutLine(temperature + " is an even number"); 

} 
+2

Вторая инструкция 'if' - это кошка Шредингера - она ​​не является ни истиной, ни ложью, поскольку она никогда не оценивается. –

+0

@OriLentz Спасибо :) –

ответ

0

вложенный, если утверждение не является ни истинным или ложным, как он никогда не оценивается и полностью игнорируется. (Спасибо Ори и Бергер).

2

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

Так работают современные языки программирования - код, который должен быть выполнен, добавляется в стек команд. Если 1-й оператор оценивает значение false, ничто внутри тела if не добавляется в стек.

0

Есть три альтернативных способа сделать это - вы должны решить для себя.

/** 
* Warning on temp >= 18. 
* Warning on temp >= 18 && temp is even. 
*/ 
public void test1() { 
    if (temperature >= 18) { 
     myWindow.writeOutLine(temperature + " is greater than or equal  to 18"); 
     if (temperature % 2 == 0) { 
      myWindow.writeOutLine(temperature + " is an even number"); 
     } 
    } 
} 

/** 
* Warning on temp >= 18. 
* Warning on temp is even. 
*/ 
public void test2() { 
    if (temperature >= 18) { 
     myWindow.writeOutLine(temperature + " is greater than or equal  to 18"); 
    } 
    if (temperature % 2 == 0) { 
     myWindow.writeOutLine(temperature + " is an even number"); 
    } 

} 

/** 
* Warning on temp >= 18. 
* Warning on temp < 18 && temp is even. 
*/ 
public void test3() { 
    if (temperature >= 18) { 
     myWindow.writeOutLine(temperature + " is greater than or equal  to 18"); 
    } else if (temperature % 2 == 0) { 
     myWindow.writeOutLine(temperature + " is an even number"); 
    } 
} 
+0

Я просто запускаю программу, в которой есть два оператора trap, как тест, исправьте меня, если я ошибаюсь, но test3 дает возможность для инструкции if if быть правильной, даже если первая если утверждение неверно –

+0

@TimothyKardaras - Правильно, но не * возможность *. Это 'test1 -> A && B',' test2 -> A || B || оба ',' test3 -> A || B'. – OldCurmudgeon

0

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

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

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

+0

Я понимаю, что отступы могут быть немного неряшливыми, но что не так с порядком моих условий, особенно с такой небольшой программой? –

0

2-й, если стат ement if (temperature % 2 == 0) может быть или не быть истинным, но выполняется только тогда, когда истинно утверждение 1-го if if (temperature >= 18).

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