Почему переменная всегда выводит 1, даже если она увеличивается в Javascript - PullRequest
0 голосов
/ 01 июля 2018

Я пытался решить проблему, которую нашел в Интернете. Я успешно решил проблему, но есть одна маленькая ошибка, которую я не смог решить.

Проблема

Напишите игру-угадайку, в которой пользователь должен угадать секретное число. После каждого предположения программа сообщает пользователю, был ли их номер слишком большой или слишком маленький. В конце количество попыток должно быть напечатанным.

Вот мой код:

// Generate a random number between 1 and 100
var num = Math.floor(Math.random() * (100)) + 1;
var running = true;    

while(running) {
    var tries = 1;
    var input = prompt("Take a guess");

    if (input == num) {
        console.log("Correct!");

        console.log("Number of tries: " + tries);
        running = false;
    }else if (input > num) {
        console.log("Too big");
    }else if (input < num) {
        console.log("Too small");
    }
    tries++;
}

ошибка

Даже если пользователь делает более 1 попытки, программа все равно говорит:

Количество попыток: 1

Пожалуйста, объясните, что я делаю не так.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 01 июля 2018

Ваша переменная tries декаль в теле while. Итак, при любой итерации цикла эта переменная получает значение 1. Чтобы решить эту проблему, вы должны объявить и инициализировать переменную вне цикла:

// Generate a random number between 1 and 100
var num = Math.floor(Math.random() * 100) + 1;
var running = true;
var tries = 1;

while (running) {
  var input = prompt("Take a guess");

  if (input == num) {
    console.log("Correct!");
    console.log("Number of tries: " + tries);
    running = false;
  } else if (input > num) {
    console.log("Too big");
  } else if (input < num) {
    console.log("Too small");
  }

  tries++;
}

Примечание: Не используйте console.log(), используйте alert(). Консоль предназначена для отладки, а не для уведомлений пользователей.

0 голосов
/ 01 июля 2018

Я вижу твою проблему. Если вы поместите переменную внутрь функции while, она будет сбрасываться каждый раз, что означает, что она будет равна 1 каждый раз.

Если вы положите его наружу, все будет в порядке. Кроме того, я считаю, что Promt возвращает строку, а не число, поэтому я бы порекомендовал вам либо преобразовать число в строку, либо Promt в число.

Вот рабочий код:

var num = Math.floor(Math.random() * (100)) + 1;
var running = true;    
var tries = 1;

while(running) {

    var input = parseFloat(prompt("Take a guess"));

    if (input == num) {
        console.log("Correct!");

        console.log("Number of tries: " + tries);
        running = false;
    }else if (input > num) {
        console.log("Too big");
    }else if (input < num) {
        console.log("Too small");
    }
    tries++;
}
0 голосов
/ 01 июля 2018

Вы повторно инициализируете tires на каждой итерации цикла while:

while(running) {
    var tries = 1;
    ...
}

Попробуйте инициализировать вне вашего цикла.

var num = Math.floor(Math.random() * (100)) + 1;
var running = true;    
var tries = 1;

while(running) {
    var input = prompt("Take a guess");

    if (input == num) {
        console.log("Correct!");

        console.log("Number of tries: " + tries);
        running = false;
    }else if (input > num) {
        console.log("Too big");
    }else if (input < num) {
        console.log("Too small");
    }
    tries++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...