2013-08-30 2 views
3

Я новичок в программировании и попытались программировать, если-иначе логика для создания массивов и т.д ..яваскрипт если еще логика не работает

Я хочу использовать переменную точки, чтобы определить, какие указывает интервал переменной попадает внутрь, а затем делает массив с funfacts для этого интервала и возвращает случайный funfact из этого массива.

Например, у меня есть вехи 1000, 2500 и т. Д. Если userScorePoints больше 2500, я хочу, чтобы метод возвращал случайный funfact из массива, который содержит funfact об этом числе, вплоть до того, что userScorePoints достигнут следующая веха, которая равна 5000.

Проблема с кодом, который я написал, заключается в том, что он возвращает только случайный funfact из первого, если, поэтому я получаю только фунты от числа 1000, хотя у меня должны быть funfacts от числа 2500, так как мои баллы теперь превышают 2603.

Может кто-нибудь, пожалуйста, помогите мне с этим ..?

Вот мой код:

function getFunfact(userScorePoints) { 
    var array = new Array(); 

    if (1000 <= userScorePoints < 2500) { 
     var funfact1000 = new Array(); 
     funfact1000[0] = "funfacts about the number 1000"; 
     funfact1000[1] = "..."; 
     funfact1000[2] = "..."; 
     funfact1000[3] = "..."; 
     funfact1000[4] = "..."; 
     funfact1000[5] = "..."; 
     array = funfact1000; 
    } else if (2500 <= userScorePoints < 5000) { 
     var funfact2500 = new Array(); 
     funfact2500[0] = "funfacts about the number 2500"; 
     funfact2500[1] = "..."; 
     funfact2500[2] = "..."; 
     funfact2500[3] = "..."; 
     funfact2500[4] = "..."; 
     funfact2500[5] = "..."; 
     array = funfact2500; 
    } else if (5000 <= userScorePoints < 10000) { 
     var funfact5000 = new Array(); 
     funfact5000[0] = "funfacts about the number 5000"; 
     funfact5000[1] = "..."; 
     funfact5000[2] = "..."; 
     funfact5000[3] = "..."; 
     funfact5000[4] = "..." 
     funfact5000[5] = "..."; 
     array = funfact5000; 
    } else if (10000 <= userScorePoints < 20000) { 
     var funfact10000 = new Array(); 
     funfact10000[0] = "funfacts about the number 10.000"; 
     funfact10000[1] = "..."; 
     funfact10000[2] = "..."; 
     funfact10000[3] = "..."; 
     funfact10000[4] = "..."; 
     funfact10000[5] = "..."; 
     array = funfact10000; 
    } else if (20000 <= userScorePoints < 30000) { 
     var funfact20000 = new Array(); 
     funfact20000[0] = "funfacts about the number 20.000"; 
     funfact20000[1] = "..."; 
     funfact20000[2] = "..."; 
     funfact20000[3] = "..."; 
     funfact20000[4] = "..."; 
     funfact20000[5] = "..."; 
     array = funfact20000; 
    } else if (30000 <= userScorePoints < 50000) { 
     //etc. 
    } else {} 
    return array[getRandom(6)]; //this method returns a random element, this one works. 
+0

1000 <= userScorePoints && userScorePoints <2500 – sp00m

+0

Он теперь работает, спасибо! – user2731951

ответ

5

Вы не можете связать такие реляционные сравнения. Вы должны написать:

if (1000 <= userScorePoints && userScorePoints < 2500) { 
    ... 
} 

То, что вы написали был разобран как если бы вы написали:

if ((1000 <= userScorePoints) < 2500) { 
    ... 
} 

Сравнения в скобках имеют значение 0 или 1, которая всегда меньше, чем 2500.

+0

Ahhhh .. Вот почему .. Я переключу его! Думаю, я просто подумал, что это то же самое, что и в программировании на Java. Спасибо огромное! – user2731951

+0

Удивительный! Теперь это работает. Еще раз спасибо @Barmar. – user2731951

4

Синтаксис не так для того, что вы на самом деле want-

Это правильный синтаксис -

if(5000 <= userScorePoints && userScorePoints < 10000) 

Используйте '& &' для множественные логические сравнения.

Я также объясню, что делает интерпретатор понять, когда вы пишете код, который -

if(5000 <= userScorePoints < 10000) 

в основном лань первое сравнение 5000 <= userScorePoints. Результатом будет либо true, либо false, что эквивалентно 1 или 0 соответственно при преобразовании в число.

Таким образом, в следующем шаге вы сравните либо 0 < 10000, если результат предыдущего сравнения является ложным или1 < 10000 если результат верен. В обоих случаях значения меньше 10000, поэтому условие всегда верно.

Надеюсь, это очистит ваши сомнения. Счастливое кодирование!

3

Программирование не является математикой. Ваши контактные данные должны быть в форме:

if (1000 <= userScorePoints && userScorePoints < 2500) 
2

Javascript не связывает подобные сравнения. if (a < b < c) всегда будет иметь значение для c больше, чем 1 *.

Решение заменить их if (a<b && b < c)

  • a<b<c эквивалентно (a<b)<c из-за Javascript правил приоритета операций. a<b вернет true или false, которые по сравнению с номером листы типа 1 или 0. Вывод заключается в том, что все ваши сравнения фактически сравнивают c с 0 или 1.
+0

Приятно знать, я узнаю что-то новое каждый день. Благодаря! – user2731951

1

Вам нужно использовать что-то вроде этого:

if (1000 <= userScorePoints && userScorePoints < 2500) 
if (2500 <= userScorePoints && userScorePoints < 5000) 
etc... 

Синтаксис вы использовали не собирается дать вам результат вы хотите, поскольку Javascript разбирает это следующим образом:

if((1000 <= userScorePoints)/*either true(1) or false(0)*/ < 2500)/* Always true, 
                    since both 0 and 
                    1 are < 2500 */ 
+0

Спасибо за объяснение! – user2731951

+0

@ user2731951 Не беспокойтесь, удачи в остальной части вашего проекта :) –

0

Tushar is right. Использование:

function getFunfact(userScorePoints) { 
    var array = new Array(); 

    if ((1000 <= userScorePoints) && (userScorePoints < 2500)) { 
     var funfact1000 = new Array(); 
     funfact1000[0] = "funfacts about the number 1000"; 
     funfact1000[1] = "..."; 
     funfact1000[2] = "..."; 
     funfact1000[3] = "..."; 
     funfact1000[4] = "..."; 
     funfact1000[5] = "..."; 
     array = funfact1000; 
    } else if ((2500 <= userScorePoints) && (userScorePoints < 5000)) { 
     var funfact2500 = new Array(); 
     funfact2500[0] = "funfacts about the number 2500"; 
     funfact2500[1] = "..."; 
     funfact2500[2] = "..."; 
     funfact2500[3] = "..."; 
     funfact2500[4] = "..."; 
     funfact2500[5] = "..."; 
     array = funfact2500; 
    } else if ((5000 <= userScorePoints) && (userScorePoints < 10000)) { 
     var funfact5000 = new Array(); 
     funfact5000[0] = "funfacts about the number 5000"; 
     funfact5000[1] = "..."; 
     funfact5000[2] = "..."; 
     funfact5000[3] = "..."; 
     funfact5000[4] = "..." 
     funfact5000[5] = "..."; 
     array = funfact5000; 
    } else if ((10000 <= userScorePoints) && (userScorePoints < 20000)) { 
     var funfact10000 = new Array(); 
     funfact10000[0] = "funfacts about the number 10.000"; 
     funfact10000[1] = "..."; 
     funfact10000[2] = "..."; 
     funfact10000[3] = "..."; 
     funfact10000[4] = "..."; 
     funfact10000[5] = "..."; 
     array = funfact10000; 
    } else if ((20000 <= userScorePoints) && (userScorePoints < 30000)) { 
     var funfact20000 = new Array(); 
     funfact20000[0] = "funfacts about the number 20.000"; 
     funfact20000[1] = "..."; 
     funfact20000[2] = "..."; 
     funfact20000[3] = "..."; 
     funfact20000[4] = "..."; 
     funfact20000[5] = "..."; 
     array = funfact20000; 
    } else if ((30000 <= userScorePoints) && (userScorePoints < 50000)) { 
     //etc. 
    } else {} 
    return array[getRandom(6)]; 
} 
Смежные вопросы