Как исправить мой цикл while с помощью операторов if в Javascript

#javascript #html

Вопрос:

Эй, я работаю над проектом игры в угадайку с помощью javascript, который предполагает ввод числа в приглашение «Дайте мне число от 1 до 10». Инструкции должны включать следующее:

хотя предположение не равно целевому запросу на новое предположение, если предположение меньше целевого, выведите «слишком низко!», иначе, если предположение больше целевого, выведите «слишком высоко!», иначе выведите «Вы поняли!»

Таким образом, у меня есть цикл while и условные операторы if, но я не знаю, как содержать мои операторы if внутри цикла while. Мои фактические результаты просто побуждают меня угадывать снова и снова, не предупреждая слишком высоко! или слишком низко! Однако мое утверждение » еще » при угадывании правильного числа, похоже, работает. Спасибо.

 let min = 1;
let max = 10;
let target = Math.random() * (max - min   1);
target = Math.floor(target)   min;

let guess = (0);

guess = prompt("Give me a number between 1 and 10");
console.log("Your guess is"   guess);


while (guess != target) {
  prompt("Guess again");
  console.log(guess);

}
if (guess < target) {
  alert("too low!");
  console.log("too low guess", guess);

} else if (guess > target) {
  alert("too high!");
  console.log("too high guess", guess);

} else {
  alert("You got it!");
} 

Комментарии:

1. Вы не переназначаете значение предположения, и результат запроса всегда является строкой или нулем, поэтому вы также должны преобразовать его в число

2. «Мои фактические результаты просто побуждают меня снова и снова угадывать, не предупреждая слишком высоко! или слишком низко!» — потому if ... else ... что деталь не входит в while цикл

3. Вы должны поместить содержимое if..else в блок while, а не после него.

Ответ №1:

В настоящее время ваш код выполняет это:

  1. Навсегда: спросите «угадай еще раз».
  2. После того, как «навсегда» закончится (чего никогда не будет!) , проверьте значение guess . Кроме того, значение guess того же, что и при первом задании вопроса.

Ты захочешь этого:

  1. Навсегда: спросите «угадай еще раз».
  2. После «угадайте еще раз» проверьте и сохраните сохраненное значение последнего ответа.
  3. Если ответ правильный, остановите вечно работающий цикл.

Но что также важно: убедитесь prompt , что возвращает номер, потому что в текстовом приглашении может быть введено все, что угодно.

Так что это было бы:

 // See Note 1.
guess = parseInt(prompt("Give me a number between 1 and 10"), 10);
console.log("Your guess is"   guess);

// 1. Do something forever
while (guess != target){
    // 2. store the last answer
    guess = parseInt(prompt("Guess again"), 10);
    console.log(guess);
    
    // 2b. check the last answer
    if (guess < target){
        alert("too low!");
        console.log("too low guess", guess);
    }else if (guess > target){
        alert("too high!");
        console.log("too high guess", guess);
    }
    // 3. If the answer is correct, `guess === target` so the loop will end.
}

// See Note 2.
alert("You got it!");
 

Примечание 1: Если игрок введет что-то, что нельзя превратить в целое число, parseInt(, 10) оно вернется NaN (не число). Вы можете проверить это: isNaN(123) / isNaN(NaN) .

Примечание 2: Ваше приложение не покажет сообщение, если игрок исправит его за один раз, потому что «вы поняли» было внутри цикла. Если бы ответ был правильным с первого раза, цикл никогда бы не был введен. Поместите сообщение за пределы цикла, чтобы исправить это.