首页 > 解决方案 > 找到无限循环中询问的数字的算术平均值

问题描述

我需要达到以下条件:

  1. 脚本在无限循环中要求 1 到 100 之间的数字(在提示中)
  2. 如果用户输入 NaN、空字符串或超出范围的数字,它会再次要求输入数字
  3. 如果用户按下取消,则显示一个警报,其中包含输入的数字及其算术平均值
  4. 我不能使用数组!

这就是我所拥有的,我知道我在这里遗漏了一些关键逻辑,有什么建议吗?

  while (true) {
    var userInput = prompt("Enter a number between 1 and 100:");
    var num = parseInt(userInput, 10);
    if (num >= 1 && num <= 100) {
      var nums = 0;
      nums += num;
      var counter = 0;
      counter++;
    } else if (userInpuft === null) {
      alert(nums / counter);
      alert(counter);
      break;
    }
  }

标签: javascriptloopsprompt

解决方案


一组数字的平均值可以增量计算,而无需将所有数字保存在任何地方。您所需要的只是先前的平均值和已输入的数字计数。

考虑公式mean = total/count。如果您知道meancount,您可以将等式反转为total = mean * count

当您获得一个新数字时,计数会增加 1,并将新数字添加到总数中。所以公式是mean = (mean * (count - 1) + new_number)/count

let count = 0;
let mean = 0;
while (true) {
  let input = prompt("Enter a number");
  if (input === null) {
    break;
  }
  new_number = parseFloat(input);
  if (!isNaN(new_number) && new_number >= 1 && new_number <= 100) {
    count++;
    mean = (mean * (count - 1) + new_number) / count;
    alert(`Count = ${count}, Mean = ${mean}`);
  }
}


推荐阅读