2017-02-01 3 views
-2

Мой вопрос: как получилось мое «Ты получил!» предупреждение постоянно продолжается? Я знаю, что могу заставить его сломаться, но я хочу знать, почему он продолжает это делать. Он должен иметь этот secret_number === ответ и выйти из цикла while, поэтому, очевидно, это не так, и я не понимаю почему. Спасибо :)Бесконечный цикл предупреждения о цикле в javascript

var secret_number=Math.floor((Math.random() * 10) + 1); 
var answer=parseInt(prompt("Enter a number you want to try")); 

while(secret_number!==answer) 
{ 
if(answer == null || answer == "" ||isNaN(answer)) 
break; 

if(answer>secret_number) 
answer=prompt("This number is too high!"); 

else if(answer<secret_number) 
answer=prompt("This number is too low!"); 

else 
alert("You got it!"); 
} 
+0

Не мы уже рассмотрим, почему именно 'while' петли могут вызвать бесконечные циклы и показать правильный путь в этой должности: http://stackoverflow.com/questions/41970711/javascript-about- бесконечный цикл-prompt-and-stopping-the-loop Мы также рассмотрели хорошие методы кодирования в этом сообщении, но вы, похоже, не приняли ни одного из этих советов. –

ответ

1

При установке «ответ» снова в то время цикла, вы не делаете parseInt поэтому значение теперь строка, а не равносильна тайне.

> и < преобразуют оба значения в числовые перед сравнением, поэтому обе эти проверки пропускаются, если вы вставляете нужный номер, но условие while всегда истинно.

+0

Получил! благодаря :) –

0

Проблема в том, что у вас нет единого правила, чтобы закончить цикл while и показать предупреждение.

Чтобы закончить цикл while, ваш секретный номер и ответ должны быть одинаковыми (===), однако для отображения предупреждения, которое вы отвечаете, не должно быть больше или меньше секретного номера.

Чтобы исправить, выполните синтаксический анализ запросов, и я бы использовал одно и то же правило для отображения предупреждения и завершения программы. или даже поставить предупреждение вне цикла while.

0

Либо изменить while(secret_number!==answer) к while(secret_number!=answer)

или

преобразовать prompt("This number is too high!") в целое, используя parseInt, а затем присвоить ему ответить 'ответ = ParseInt (подсказка() "Это число слишком велико!");'

Демо: https://jsfiddle.net/cnvm19ha/

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