在練習期間,我將while循環與if/else子句組合在一起,因此決定將if/else轉換爲使用switch語句,以便挑戰我的想法。比較等效if/else和開關循環
該方案很簡單:有兩名球員必須贏得連續3場比賽才能停止比賽。玩家數值在0和1之間隨機排序,並且對配對有一個上限,只是在這種情況下隨機性會贏得比賽:)
我想知道哪一個是最好的解決方案,並且爲什麼,因爲對我來說,交換機版本似乎只需要更少的代碼行!
<?php
$playerA=0;
$playerB=0;
$winA=0;
$winB=0;
$pair=0;
while ($winA<=2 && $winB<=2 && $pair<=15) {
$playerA = rand(0,1);
$playerB = rand(0,1);
if ($playerA > $playerB) {
$winA ++;
$winB=0;
echo "<div>Player A Wins.</div>";
} elseif ($playerA < $playerB) {
$winB ++;
$winA=0;
echo "<div>Player B Wins.</div>";
} elseif ($playerA == $playerB) {
$pair ++;
$winA=0;
$winB=0;
echo "<div>Pair, play again!</div>";
}
}
echo "<div>There is a total of {$pair} pair matches</div>";
?>
而現在的開關一個...
<?php
$playerA=0;
$playerB=0;
$winA=0;
$winB=0;
$pair=0;
while ($winA<=2 && $winB<=2 && $pair<=15) {
$playerA = rand(0,1);
$playerB = rand(0,1);
switch ($playerA && $playerB):
//This is an error: it should have been switch(true)
case ($playerA > $playerB):
$winA++;
$winB=0;
echo "<div>Player A Wins.</div>";
break;
case ($playerA < $playerB):
$winB++;
$winA=0;
echo "<div>Player B Wins.</div>";
break;
case ($playerA == $playerB):
$pair++;
$winA=0;
$winB=0;
echo "<div>Pair, Play again!</div>";
break;
endswitch;
}
echo "<div>There is a total of {$pair} pair matches</div>";
?>
感謝您的回答:)我是用前開關(真),但後來我在什麼地方讀到它可以被認爲是對switch語句的濫用。但是,如果&&按照您的說法工作,那麼爲什麼我在執行代碼時得到A或B來贏得某些東西?我不應該總是得到一對配對嗎? – frafor
A && B得到evalueted爲真,所以(如果A!= 0且B!= 0)它與開關(真)相同。在案件中使用表達通常可以稱爲「濫用」。 – schokocappucino
是的,但是如果A和B都是!= 0,這意味着它們都是1,因爲rand(0,1)。那麼爲什麼我不總是一對一的情況下,執行該代碼? – frafor