2016-12-30 5 views
-5

Извините, я не смог найти что-то достаточно, чтобы ответить на мой вопрос, почему утверждение, которое имеет первое условие true, игнорируется, а второе, которое не выполняется?Операция условного &&, когда выполняется только одно условие

 [Code in debugger][1] 

enter image description here

} else if (batAOnStrike && batThreeOnStrike) { 
     batThreeScore += 1; 
     batThreeBallsFaced += 1; 
     batThreeStrikeRate = batThreeScore * 100/batThreeBallsFaced; 
     displayBatAScore(batThreeScore); 
     displayBatABalls(batThreeBallsFaced); 
     displayStrikeBatA(batThreeStrikeRate); 
     teamScore += 1; 
     scoreCalc(); 
     ranRuns += 1; 
     batDecider(); 
    } if (batBOnStrike && batThreeOnStrike) { 
     batThreeScore += 1; 
     batThreeBallsFaced += 1; 
     batThreeStrikeRate = batThreeScore * 100/batThreeBallsFaced; 
     displayBatBScore(batThreeScore); 
     displayBatBBalls(batThreeBallsFaced); 
     displayStrikeBatB(batThreeStrikeRate); 
     teamScore += 1; 
     scoreCalc(); 
     ranRuns += 1; 
     batDecider(); 
+1

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

+0

Интересно, почему нижний оператор работает, когда выполняется только одно из условий. Не удалось выяснить, как показывать фотографию. – johockings

+1

Ваша формулировка неясна. У вас есть условие «и», и «batBOnStrike» является ложным. Что неожиданно? – chrylis

ответ

-2

как логические выражения вычисляются слева направо, они проверены на предмет возможного "короткого замыкания" оценки с использованием следующих правил:

  • false && (anything) является кратко- схема вычисляется как false.
  • true || (anything) - это короткое замыкание, рассчитанное на значение true.

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

Так что, если вы batAOnStrike или batBOnStrike euqals к false, то нет никакой необходимости, чтобы оценить batThreeOnStrike.

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