【问题标题】:How to prompt a user to re-enter a number after an invalid entry输入无效后如何提示用户重新输入号码
【发布时间】:2021-05-27 13:23:00
【问题描述】:

我正在提示用户输入一个数字,该数字将是随机数介于两者之间的最大数字。如果他们在第一次出现提示时输入一个数字,并且该代码在 1 和输入的最大数字之间选择一个随机数,则该代码有效。如果用户没有输入数字(即输入字母或符号),我希望再次提示用户输入数字。我还需要添加代码以确保输入的数字是正数

let num_guess = 0
let tries = []

let max_num = Number(prompt("Enter a maximum number:"));
if (isNaN(max_num)) {
  // need to reprompt user to enter a valid maximum number and make sure that the user will keep being prompted until a positive number is entered
}

let num = Math.floor(Math.random() * max_num) + 1;

console.log(max_num)
console.log(num)

function do_guess() {
  let guess = Number(document.getElementById("guess").value);

  let message = document.getElementById("message");

  if (tries.includes(guess)) {
    message.innerHTML = "That number has already been guessed, try again"
  } else if (isNaN(guess)) {
    message.innerHTML = 'That is not a number!';
  } else if (guess <= 0 || guess > max_num) {
    message.innerHTML = 'That number is not in range, try again.';
  } else if (guess > num) {
    message.innerHTML = "No, try a lower number.";
    num_guess++
    tries.push(guess)
  } else if (guess < num) {
    message.innerHTML = "No, try a higher number.";
    num_guess++
    tries.push(guess)
  } else if (guess == num) {
    num_guess++
    tries.push(guess)
    message.innerHTML = "You got it! It took you " + num_guess + " tries and your guesses were " + tries + ".";
  }
}

【问题讨论】:

  • a question得到回复后,您刚才是不是删除了?这不友好

标签: javascript html prompt


【解决方案1】:

您可以将prompt 放入 do ... while loop

let max_num; 

do {
  max_num = Number(prompt("Enter a maximum number:"));
} while (isNaN(max_num))

let num = Math.floor(Math.random() * max_num) + 1;

console.log({max_num, num})

【讨论】:

  • 很好地使用了 do...while 循环!没有看到很多。
  • @DanMullin 这通常是您需要一个 while 循环但您确定需要它运行一次的时候。
  • 我不经常使用它们,有时甚至忘记它的存在。
  • 我也没有,我必须说,在 20 多年的开发中,我使用它的次数不到 10 次 :D
【解决方案2】:

您可以创建一个调用输入的函数。如果输入无效,则从内部再次调用该函数。

let num_guess = 0;
let tries = [];
let max_num = 0;

// Add this function to keep prompting user until a valid input is entered.
function getInput() {
  var inputValue = Number(prompt("Enter a maximum number:"));
  if (isNaN(inputValue)) {
    return getInput();
  }
  else {
    return inputValue;
  }
}

max_num = getInput();

let num = Math.floor(Math.random() * max_num) + 1;

console.log(max_num)
console.log(num)

function do_guess() {
  let guess = Number(document.getElementById("guess").value);

  let message = document.getElementById("message");

  if (tries.includes(guess)) {
    message.innerHTML = "That number has already been guessed, try again"
  } else if (isNaN(guess)) {
    message.innerHTML = 'That is not a number!';
  } else if (guess <= 0 || guess > max_num) {
    message.innerHTML = 'That number is not in range, try again.';
  } else if (guess > num) {
    message.innerHTML = "No, try a lower number.";
    num_guess++
    tries.push(guess)
  } else if (guess < num) {
    message.innerHTML = "No, try a higher number.";
    num_guess++
    tries.push(guess)
  } else if (guess == num) {
    num_guess++
    tries.push(guess)
    message.innerHTML = "You got it! It took you " + num_guess + " tries and your guesses were " + tries + ".";
  }
}

【讨论】:

  • 感谢您的关注。我固定在答案中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 2017-07-29
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
相关资源
最近更新 更多