Может ли кто-нибудь объяснить мне, почему этот код иногда входит в бесконечный цикл (предположительно из циклов while) и выдает окно браузера? Это как-то связано с while(userChoice != randNumber)
, не имеет ли этого достаточного конца?Почему этот код иногда приводит к краху браузера?
var check = function(userChoice) {
while ((isNaN(userChoice)) || (userChoice > 100) || (userChoice < 1) || (userChoice %1 !== 0)) {
userChoice = prompt("Choose a number between 1 - 100", "It must be a whole number!");
}
};
var randNumber = Math.floor(Math.random() * 100 + 1);
var userChoice = prompt("Choose a number between 1 - 100");
console.log(userChoice);
check(userChoice);
//Above sorts out the computer choice and sets the rules for the user choice
while(userChoice != randNumber) {
if (userChoice > randNumber) {
userChoice = prompt("Your number is GREATER than the computer.", "Please re-choose a number between 1 - 100");
check(userChoice);
}
else if (userChoice < randNumber) {
userChoice = prompt("Your number is SMALLER than the computer.", "Please re-choose a number between 1 - 100");
check(userChoice);
}
}
console.log("Your number matches! Congratulations!");
Это модификация какого-то более раннего кода, который у меня был, который чаще всего падал бы. Хотя приведенный выше код более стабилен, он по-прежнему периодически падает, хотя я не могу объяснить точную процедуру инициализации цикла infinte.
старый код выглядит следующим образом: (в качестве приоритета может кто-то говорит мне, почему это происходит сбой, я не вижу, почему цикл, пока не заканчивается, когда правильное число будет достигнуто?!)
main = function() {
var randNumber = Math.floor(Math.random() * 100 + 1);
var userChoice = prompt("Choose a number between 1 - 100");
while ((isNaN(userChoice)) || (userChoice > 100) || (userChoice < 1) || (userChoice %1 !== 0)) {
userChoice = prompt("Choose a number between 1 - 100", "It must be a whole number!");
}
//Above sorts out the computer choice and sets the rules for the user choice
while(userChoice !== randNumber) {
if (userChoice > randNumber) {
userChoice = prompt("Your number is GREATER than the computer.", "Please re-choose a number between 1 - 100");
}
else if (userChoice < randNumber) {
userChoice = prompt("Your number is SMALLER than the computer.", "Please re-choose a number between 1 - 100");
}
}
return("Your number matches! Congratulations!");
};
main();
, кажется, работает хорошо для меня. Когда вы замечаете бесконечный цикл? – MitulP91
@ MitulP91 Ну это кажется довольно странным. Я просто приступил к сбою снова, неоднократно помещая случайные числа, минус числа, буквы и символы. Я не думаю, что это может привести к сбою, если вы перегрузите браузер? Я очень новичок в этом, поэтому я могу просто быть идиотом! – JoeTea
Самым умным было бы сбросить этот код в стиле 1995 года. Напишите документ с текстовым вводом, кнопкой и местом для вывода ваших сообщений. Ваш скрипт будет оценивать значение ввода, когда пользователь нажимает кнопку. Пользователи HATE запрашивают, и они ** действительно ** ненавидят, что они появляются снова и снова. –