2017-02-05 3 views
0

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

У меня есть 2 цикла.

Код 1:

document.getElementById("guess").onclick = function() { 
 

 
    var myNumber = document.getElementById("myNumber").value; 
 
    var gotIt = false; 
 
    var numberOfGuesses = 1; 
 

 
    while (gotIt == false) { 
 

 
    var guess = Math.random(); 
 
    guess = guess * 6; 
 
    guess = Math.floor(guess); 
 

 
    if (guess == myNumber) { 
 

 
     gotIt = true; 
 

 
     alert("Got it! It was a " + guess + ". It took me " + numberOfGuesses + " guesses."); 
 

 
    } else { 
 

 
     numberOfGuesses++; 
 
    } 
 
    } 
 
}
<input type="text" name="" id="myNumber"> 
 
<button id="guess">Guess!</button>

Код 2:

document.getElementById("guess").onclick = function() { 
 

 
    var myNumber = document.getElementById("myNumber").value; 
 
    var gotIt = false; 
 
    var numberOfGuesses = 1; 
 

 
    while (gotIt == false) { 
 

 
    var guess = Math.random(); 
 
    guess = guess * 6; 
 
    guess = Math.floor(guess); 
 

 
    if (guess == myNumber) { 
 

 
     gotIt = true; 
 
     alert("Got it! It was a " + guess + ". It took me " + numberOfGuesses + " guesses."); 
 
    } else { 
 
     numberOfGuesses++; 
 
    } 
 
    } 
 
}
<select id="myNumber"> 
 
    <option>0</option> 
 
    <option>1</option> 
 
    <option>2</option> 
 
    <option>3</option> 
 
    <option>4</option> 
 
    <option>5</option> 
 
</select> 
 

 
<button id="guess">Guess!</button>

2-ая часть работает отлично; 1-й приводит к сбою браузера. Моя идея заключается в том, что в первом случае слишком много циклов, чтобы догадываться, но я не могу понять, почему это происходит.

Спасибо всем, кто хочет объяснить.

+0

В чем разница между двумя частями кода? Они выглядят почти точно так же. – Pointy

+0

В любом случае первый бит кода работает просто отлично для меня. – Pointy

+1

Работает и для меня. Помните, что если вы поместите любое число больше 5 или меньше 0, ваш код никогда не сможет угадать этот номер. И вы получите бесконечный цикл, и это заставит ваш браузер зависать. –

ответ

0

В принципе оба подхода работают очень хорошо. У вас просто небольшая логическая ошибка в вашей первой реализации.

Причина, по которой вы повесили номер один, заключается в том, что вы не ограничиваете пользователя вводимыми номерами в диапазоне от 0-5. Поэтому любое число из этого диапазона петли навсегда, как это никогда не приведет к номеру 0-5 диапазона, который вы ограничиваетесь при умножении случайного на 6.

Нижняя линия: Либо пойти с вариантом 2 , или подтвердить, что пользователь действительно набрал номер в диапазоне от 0 до 5.

+0

Спасибо. # 1 висит для меня, даже когда я вхожу в 3, например. Мне было интересно, почему это так. –

+0

Это очень странно ... Я запустил его как на скрипке на ваш вопрос, так и на локальном компьютере. Работает отлично с любым числом между 0-5. У меня есть 2 вопроса для вас. '1)' Если вы используете скрипт из своего вопроса, он тоже висит ?. '2)' Можете ли вы разместить точный HTML-код, который вы используете локально на вашем компьютере? –