Игра в угадайку чисел, отношение между maxGuesses и количеством догадок искажено на 1 - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь разрешить игре только 3 попытки угадать правильно. Проблема в том, что он позволяет пользователю угадать 4-й раз, но даже если пользователь угадывает правильно с 4-й попытки, я получаю неправильное ответное сообщение. Я попытался изменить количество догадок, изменив начальную позицию i = 0, вычтя одну из maxGuesses в цикле for. Независимо от того, что я пытаюсь сделать, отношения разорваны одним. Вот мой код.

let readlineSync = require("readline-sync");
let hint = "";
let maxGuesses = 3;
const maxRange = 10;
const minRange = 1;
let userGuess = readlineSync.question(
  "I have chosen a number between " +
    minRange +
    " and " +
    maxRange +
    ". You have " +
    maxGuesses +
    " tries to guess it!\n"
);

const randomNumber = Math.floor(Math.random() * maxRange + 1);


function handleGuess(userGuess) {
    if (userGuess != null && userGuess != undefined && (userGuess <= maxRange && userGuess >= minRange)) {
      for (i = 0; i <= maxGuesses - 1; i++) {
        if (userGuess == randomNumber) {
          console.log(userGuess + " is CORRECT! YOU WIN!");
          return;
        } else {
          if (userGuess > randomNumber) {
            hint = "Think lower you fool.";
          } else {
            hint = "Think higher you fool.";
          }
          console.log(hint);
          userGuess = readlineSync.question("Guess again. \n");
        }
      }
      console.log("Dude...YOU SUCK!");
      return;
    } else {
      userGuess = readlineSync.question("Fix your answer fool! \n");
      handleGuess(userGuess);
    }

}

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Я предполагаю, что ваш первый вызов handleGuess() без параметров. Затем ваша программа запрашивает у пользователя первое предположение (с сообщением «Исправь свой ответ, дурак!»). Если вы вызываете handleGuess() с параметром, все равно действует следующее:

После этого начнется цикл.

если первый ответ неверен, консоль отобразит сообщение «Думай [выше / ниже], ты дурак»., А затем запросит секунду предположение. Все еще в первой итерации цикла.

Вы видите, где проблема?

Если второе предположение все еще неверно, консоль отобразит второе неверное сообщение и запросит третье предположение, еще находясь во второй итерации цикла.

Наконец, если третье предположение все еще неверно, появится третье «неправильное» сообщение, и ваш код запросит четвертое предположение перед завершением цикла и отобразит сообщение «Чувак ... ТЫ ХОРОШО» !» без проверки вашего ввода.

Чтобы предотвратить это, вы можете сделать что-то вроде этого:

function handleGuess(userGuess) {
    i = 0;
    do {
        if(i > 0) {
            if(userGuess > randomNumber) {
                hint = "Think lower you fool.";
            } else {
                hint = "Think higher you fool.";
            }
            console.log(hint);
            userGuess = readlineSync.question("Guess again. \n");
        }
        while(isNaN(userGuess)) {
           userGuess = readlineSync.question("Correct you guess. \n");
        }
    } while(userGuess != randomNumber && i < maxGuesses);
    if (userGuess == randomNumber) {
        console.log(userGuess + " is CORRECT! YOU WIN!");
    } else {
        console.log("Dude...YOU SUCK!");
    }
}
0 голосов
/ 04 ноября 2018

Просто установите условие для вашего цикла: i < maxGuesses, а не i <= maxGuesses -1:

var maxGuesses = 3; 
for (i = 0; i < maxGuesses; i++) {
  console.log("Guess " + (i + 1));  // Only adding 1 here so output is 1-based
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...