2013-06-18 7 views
1

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

Предположим, что у меня есть переменное целое число и вы хотите делать разные вещи, если значение больше одного значения и меньше другого значения. Моя цель для этого переключателя состоит в том, чтобы в принципе отправлять разные результаты на основе значения $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 не работает должным образом. Он работает, но я получаю случайные эхо. Это случается, когда иногда вероятность может быть 100, и я получаю эхо. Я не уверен.

Я знаю, что смогу сделать то же самое с серией if, но это будет означать огромную разницу в длине кода, если я смогу достичь тех же результатов.

Я полагаю, что я могу сделать что-то вроде

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

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

+4

И что вы ожидаете? 'case ($ chance <15 && $ chance> 50):' переменная не может иметь оба этих значения одновременно! – jtheman

+0

Не пытайтесь получить слишком мило с тем, что вы делаете, основываясь на «длине кода». Никакие баллы не присуждаются за написание нечеткого, запутанного кода, который короче, чем ясный, легко понятный код. Я не вижу, приведет ли if-else к большему количеству кода. Если что-то оно короче, потому что вам не нужны инструкции break. –

+0

Также обратите внимание, что вам не хватает перерыва после эха «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, если бы она тестировала, насколько лучше будет работать коммутатор после того, если if/else, спасибо за ваш ответ –

0

Для того, чтобы сделать то, что вы хотели сделать, вы должны использовать, если-то еще. Значение, используемое для выражения case, должно быть целым числом, десятичной точкой с плавающей запятой или строкой.

+1

Вы пробовали? Условие, которое оценивается как логическое (как в op), работает просто отлично. – Crisp

+1

Код OP работает должным образом. Их логика просто испорчена, что приводит к ее неправильной работе. – Joe

+0

@Crisp Это не сработает, если вы пытаетесь оценить несколько диапазонов значений, подобных этому. В этом случае yo будет иметь 7 случаев операторов, которые оцениваются как true, так и false. Какой смысл делать, чтобы иметь 7 опций, когда есть мощность всего 2? Вы также не сохраняете ничего полезного, поскольку вы все еще делаете такое же количество оценок, сколько и в if-else, так что это всего лишь запутанный способ делать что-то. –

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