2016-03-04 2 views
2

Недавно я начал играть в настольные игры, и я не хочу иметь дело с вычислениями вручную. Кроме того, большинство приложений имеют какую-то проблему в любой момент времени. Я только начал писать базовый javascript и не могу заставить переключаться работать с диапазоном. Он возвращается к умолчанию. Мой код ниже, я буду помещать различные модификаторы/атрибуты в массив, но сначала хочу, чтобы базовый код работал.Диапазон переключателей Javascript

<script> 
var strMod=0; 
var strength = prompt("what is your strength?"); 


switch(strength){ 
    case (strength>=0 && strength<2): 
     strMod=-5; 
     break; 
    case (strength>=2 && strength<4): 
     strMod=-4; 
     break; 
    case (strength>=4 && strength<6): 
     strMod=-3; 
     break; 
    case (strength>=6 && strength<8): 
     strMod=-2; 
     break; 
    case (strength>=8 && strength<10): 
     strMod=-1; 
     break; 
    case (strength>=10 && strength<12): 
     strMod=0; 
     break; 
    case (strength>=12 && strength<14): 
     strMod=1; 
     break; 
    case (strength>=14 && strength<16): 
     strMod=2; 
     break; 
    case (strength>=16 && strength<18): 
     strMod=3; 
     break; 
    case (strength>=18 && strength<20): 
     strMod=4; 
     break; 
    case (strength>=20 && strength<22): 
     strMod=5; 
     break; 
    default: 
     strMod= prompt("what is your strength modifier?"); 
     break; 
} 
console.log(strMod); 
</script> 

ответ

2

Изменить switch(strength)switch(true). Это должно работать, так как вы сравниваете результаты операторов case со значением true, а не со значением strength.

JSFiddle: https://jsfiddle.net/eusw15g9/

Смотрите этот принятый ответ для получения дополнительной информации: Expression inside switch case statement

+1

Хороший вызов «перегруженного» коммутатора для оценки нескольких выражений. это быстро, просто реализовать для OP и делает именно то, что он говорит. – dandavis

+1

Отличное мышление - я полностью забыл, что (поддержал вас) :) – Cymen

+0

Я пытался использовать true, прежде чем он не сработал, что я мог делать неправильно? –

0

Переключатель оператор вычисляет выражения, используя строгое сравнение===. Это означает, что выражение будет === сравнить с соответствием первого предложения case в вашем коммутаторе. Поэтому в вашем примере выше это будет default заявление

+0

ой ... Я где-то читал, что вы могли бы использовать диапазон, но так как я не могу, может быть, если заявления будет лучше? –

+0

Существуют различные способы достижения того, что вам нужно, и если оператор является одним из них – Dalorzo

1

Вам действительно нужно использовать switch-case? Почему вы не просто делать что-то вроде этого:

var strength = prompt("What is your strength?"); 
 
var strMod = Math.floor(strength/2) -5; 
 

 
document.getElementById("foo").innerHTML = strMod;
<div id="foo"></div>

+0

Я по-прежнему относительно новичок в Javascript. Я рассмотрю сценарий Math.floor. это может быть просто –

+0

'Math.floor' по существу означает округление вниз (для положительных чисел). Например, 'Math.floor (1.9) = 1' и' Math.floor (3.4) = 3' – AMACB

+0

Я вижу, и я попробовал. он отлично работает Спасибо за советы! –

1

выключатель не работает так - то, что вы передаете switch сравнивается с помощью равенства всех значений дела. Если есть совпадение, случай выбирается в противном случае, происходит default (если оно определено).

Вы можете переключиться на длинную цепочку if() {} else if() {} ... else {} или написать функцию, которая преобразует диапазон в числовое значение и включить его.

Функция даже не нужно в вашем случае:

switch(Math.ceil(strength/2)){ 
    case 1: 
     strMod=-5; 
     break; 
    case 2: 
     strMod=-4; 
     break; 
    case 3: 
     strMod=-3; 
     break; 
    case 4: 
     strMod=-2; 
     break; 
    ... 

А потом просто охранник для <= 0 или >= MAX с if перед переключателем.

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