2013-06-18 199 views
1

我有一個相當簡單的問題,但它並沒有通過其他問題解決,並希望找到答案。在switch語句中使用條件句

假設我有一個變量整數,並希望做不同的事情,如果該值大於一個值,小於另一個值。我對這個開關的目的基本上是根據$chance的值發送不同的結果,最終我會有很多情況,因爲這是一個遊戲。

switch ($chance) 
{ 
    case ($chance < 15): 
     echo"strike<br>"; 
    case ($chance < 15 && $chance > 50): 
     echo"Ball<br>"; 
     break; 
    case ($chance < 50 && $chance > 100): 
     echo"Single<br>"; 
     break; 
    case ($chance <= 150 && $chance >= 100): 
     echo"double<br>"; 
     break; 
    case ($chance <= 175 && $chance >= 151): 
     echo"triple<br>"; 
     break; 
    case ($chance > 200 && $chance > 175): 
     echo"Ground Rule Double<br>"; 
     break; 
    case ($chance < 200): 
     echo"Home Run<br>"; 
     break; 
} 

現在,我被告知我可以在switch語句中使用條件語句,而且我也被告知我無法使用它們。我真的不知道該相信誰。

我所知道的是,目前這個switch語句不能按預期工作。它確實有效,但我會回到隨機回聲。這種情況發生時,有時機會可能是100,我會得到一個本壘打回聲。我不確定。

我知道我可以用一系列的if做同樣的事情,但是如果我可以達到相同的結果,那麼代碼長度就會有很大差異。

我想我可以這樣做

case 1: 
echo this 
case 2: 
echo that 
etc etc 

直到我打2或300,但我想避免,如果可能的。 任何輸入非常感謝

+4

你會期待什麼? 'case($ chance <15 && $ chance> 50):'一個變量不能同時擁有這兩個值! – jtheman

+0

根據「代碼長度」,不要試圖讓自己在做什麼太可愛。由於編寫不明確,複雜的代碼比明確,易於理解的代碼短,因此不會獲得積分。無論如何,我不知道if-else會導致更多的代碼。如果有的話更短,因爲你不需要中斷語句。 –

+0

此外,請注意,您在echo「strike
」後錯過了休息時間;這是故意的嗎? –

回答

2

這不是你如何使用switch語句。這是一個正確的方法的例子:

switch ($a) { 
    case 1: 
    echo 1; 
    break; 
    case 2: 
    echo 2; 
    break; 
    default: 
    echo 0; 
} 

對於要完成你需要使用舊if-else聲明什麼。

if ($chance < 15) 
    echo"strike<br>"; 
else if ($chance >= 15 && $chance < 50) 
    echo"Ball<br>"; 
else if ($chance >= 50 && $chance < 100) 
    echo"Single<br>"; 
else if ($chance <= 150 && $chance >= 100) 
    echo"double<br>"; 
else if ($chance <= 175 && $chance >= 151) 
    echo"triple<br>"; 
else if ($chance < 200 && $chance > 175) 
    echo"Ground Rule Double<br>"; 
else if ($chance <= 200) 
    echo"Home Run<br>"; 
+0

但是'if($ chance <15 && $ chance> 50):' - 明白嗎? – jtheman

+0

感謝哥們,我原本有一系列的if/else,但是測試了多少更好的switch會在if/else之後工作,謝謝你的回答 –

0

做你想要做什麼,你應該使用的if-else。用於表達式表達式的值必須是整數,浮點小數或字符串。

+1

你試過了嗎?評估爲布爾型的條件(如在op中)工作得很好。 – Crisp

+1

OP的代碼按預期工作。他們的邏輯只是有缺陷,導致它無法正常工作。 – Joe

+0

@Crisp當你試圖評估這樣的值的多個範圍時,它不會工作。在這種情況下,喲將有7個案例的評估爲真或假。當只有2的基數時,它有7個選項有什麼意義?你也沒有保存任何明智的表現,因爲你仍然在做與if-else相同數量的評估,所以這只是一個複雜的做事方式。 –