Ошибка зацикливания JavaScript с массивами - PullRequest
1 голос
/ 06 декабря 2011

Я пытаюсь предложить пользователю вес меньше 126. Тогда мой javascript должен классифицировать вес по категории. Я использовал массивы, но каждый раз, когда я повторяю цикл, он записывает 3-й массив, класс superfly. Что я могу сделать, чтобы заставить его функционировать должным образом?

var wArray = ["fly", "superfly", "bantam", "superbantam", "feather"];
var weight = parseInt(prompt("What is your weight?"), 10);

while (weight > 126) {
    alert('Please enter a weight lighter than 126');
    weight = parseInt(prompt("What is your weight?"), 10);
}

recruit();

function recruit() {
    var weightClass = wArray[0];

    if (0 < weight && weight < 112) {
        weightClass = wArray[1];
    } else if (112 < weight && weight < 115) {
        weightClass = wArray[2];
    } else if (weight > 115 && weight < 118) {
        weightClass = wArray[3];
    } else if (weight > 118 && weight < 122) {
        weightClass = wArray[4];
    } else if (weight > 122 && weight < 126) {
        weightClass = wArray[5];
    }

    document.getElementById("weight").innerHTML = ('You are in ' + weightClass + ' class!');
}

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Ваш первый, если условие неверно.Вы говорите if (112 < weight < 115).Сначала выполняется 112 < weight, затем берется результат и сравнивается с 115.

112 < weight оценивается как true или false;при использовании в числовых сравнениях true равен 1, а false равен 0. (Очевидно), что 1 и 0 всегда будут меньше 115, поэтому это условие всегда будет истинным.обратите внимание, что этот скрипт должен запускаться onload страницы.Это связано с тем, что div с идентификатором weight может не загружаться при выполнении сценария и попытке его заполнения.Вы можете сделать это, сказав:

<script type="text/javascript">
    var wArray = ["fly", "superfly", "bantam", "superbantam", "feather"];

    function calculateWeight() {
        var weight = parseInt(prompt("What is your weight?"), 10);

        while (weight > 126) {
            alert('Please enter a weight lighter than 126');
            weight = parseInt(prompt("What is your weight?"), 10);
        }

        recruit();
    }

    function recruit() {
        var weightClass = wArray[0];

        if (weight >= 112 && weight < 115) {
            weightClass = wArray[1];
        } else if (weight >= 115 && weight < 118) {
            weightClass = wArray[2];
        } else if (weight >= 118 && weight < 122) {
            weightClass = wArray[3];
        } else if (weight >= 122 && weight < 126) {
            weightClass = wArray[4];
        }

        document.getElementById("weight").innerHTML = ('You are in ' + weightClass + ' class!');

    }
</script>
<body onload="calculateWeight()">
    <!-- include body contents here -->
</body>
1 голос
/ 06 декабря 2011

строка:

if (112 <вес <115) {</p>

Должно быть

if (112 <вес && вес <115) {</p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...