抱歉,我找不到足够具体的东西来回答我的问题,为什么第一个条件为真的陈述被忽略而第二个条件没有被运行?
[Code in debugger][1]
} 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();
答案 0 :(得分:-2)
当逻辑表达式从左到右进行评估时,它们会被测试可能的短路"评估使用以下规则:
false && (anything)
短路评估为假。true || (anything)
短路评估为真。逻辑规则保证这些评估始终是正确的。请注意,上述表达式的任何部分都不会被评估,因此这样做的任何副作用都不会生效。另请注意,上述表达式的任何部分都是任何单个逻辑表达式(如括号所示)。
因此,如果 batAOnStrike 或 batBOnStrike euqals为false
,则无需评估 batThreeOnStrike 。