Рейтинг:
2
Patrice T
Потому что
while (gameScore >= 0 && gameScore <= 100) {
которые гарантируют, что
gameScore
действительно.
Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.
Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[
^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[
^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Рейтинг:
18
Peter Leow
1. это из-за этой строки кода:
while (gameScore >= 0 && gameScore <= 100)
Цитата:
что-то за пределами 0-100 или что-то другое, кроме числа
никогда не войдет в этот цикл while.
2. Почему вы ставите
break;
внутри операторов if?
3. Почему вам нужно повторно проверять это после первого оператора if?
!isNaN(gameScore)
Взгляните на этот пример и используйте его в качестве руководства по улучшению вашего кода:
gameScore = 0;
gameScore = prompt("What was your game score?");
// validation should come first to weed out all bad inputs
// change && to || and remove !, thanks to Jochen Arndt twice, my oversight twice.
if (isNaN(gameScore) || gameScore < 0 || gameScore > 100) {
alert("Please provide a valid score (0-100).");
} else if (gameScore >= 91) { // it is understood from 91 to 100
alert("Good job");
} else if (gameScore >= 81) { // it is understood from 81 to <91
alert("Pretty good");
} else { // asumming anything below 81 failed
alert("failed!");
}
Как показано в приведенном выше примере, я всегда говорю своим ученикам следующее::
1. Проверка валидации всегда идет первой, чтобы отсеять все незаконные входы до того, как начнутся другие валидные операции.
2. операторы if-else взаимозависимы, при правильном планировании вы можете устранить избыточные условия, которые уже были охвачены предыдущими операторами if-else.
Peter Leow
Спасибо. Я все еще печатал и заметил, что он уже принят.
Denisowator
Я ставлю " break;", чтобы цикл останавливался после того, как было отображено одно из сообщений.
Peter Leow
Зачем вам вообще нужна петля?
Denisowator
Как я могу включить другие значения в оператор while? Я попытался использовать isNaN (), чтобы заставить его отображать, если человек вводит только текст, но это не сработало.
Peter Leow
Я только что закончил печатать полное решение. Проверить это.
Peter Leow
Как я уже сказал, петля не нужна.
Denisowator
Есть. Мне нужно, чтобы подсказка вверху отображалась снова, каждый раз после появления ошибки, и ввод снова проверялся до тех пор, пока не будет дан действительный ввод.
Peter Leow
Я печатал, и тут пришел ваш комментарий. Так что моя догадка верна. См. мой ответ ниже.
Peter Leow
Может быть, вы намереваетесь повторно запросить у пользователя допустимый ввод, тогда вам нужно будет выполнить проверку и запрос в цикле do...while перед операторами if-else для оценки балла. Сначала разберись сам. Если вы столкнулись с трудностями после попытки, опубликуйте его как новый вопрос.
Jochen Arndt
Разве не должно быть
if (isNaN(gameScore) | / gameScore < 0 | / gameScore > 100)
Во всяком случае, хороший ответ
Peter Leow
Да, вы правы. Исправленный. Спасибо.
Jochen Arndt
Вы собираетесь сделать новую запись в отредактированных ответах?
В '!' должен быть слишком удален.
Peter Leow
Спасибо снова. Его убрали. Я был занят тем, что печатал.