为了账号安全,请及时绑定邮箱和手机立即绑定

找到无限循环中要求的数字的算术平均值

找到无限循环中要求的数字的算术平均值

汪汪一只猫 2021-09-17 13:39:13
我需要实现的是以下条件:脚本在无限循环中要求输入 1 到 100 之间的数字(在提示中)如果用户输入 NaN、空字符串或超出范围的数字,它会再次要求输入数字如果用户按下取消,则显示带有输入数字及其算术平均值的警报我不能使用数组!这就是我所拥有的,我知道我在这里缺少一些关键逻辑,有什么建议吗?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;    }  }
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超8个赞

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


考虑公式mean = total/count。如果您知道mean并且count,您可以将等式转化为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}`);

  }

}


查看完整回答
反对 回复 2021-09-17
?
呼如林

TA贡献1798条经验 获得超3个赞

如果您不能使用数组,我想另一种方法是将值存储在对象中:


let counter = 0;

const nums = {};

while (true) {

  var userInput = prompt("Enter a number between 1 and 100:");

  var num = parseInt(userInput, 10);

  if (!(num >= 1 && num <= 100)) {

    // Invalid:

    continue;

  }

  nums[counter] = num;

  counter++;

  const allNumsSoFar = Object.values(nums);

  const mean = allNumsSoFar.reduce((a, b) => a + b) / allNumsSoFar.length;

  alert('Mean: ' + mean);

}

如果这也不允许,您可以跟踪到目前为止输入的总和和数字数量:


let numCount = 0;

let sumSoFar = 0;

while (true) {

  var userInput = prompt("Enter a number between 1 and 100:");

  var num = parseInt(userInput, 10);

  if (!(num >= 1 && num <= 100)) {

    // Invalid:

    continue;

  }

  numCount++;

  sumSoFar += num;

  const mean = sumSoFar / numCount;

  alert('Mean: ' + mean);

}

您可能会考虑使用适当的 modal 而不是prompt,因为prompt它对用户非常不友好:


let numCount = 0;

let sumSoFar = 0;

const processNum = () => {

  var num = parseInt(input.value, 10);

  if (!(num >= 1 && num <= 100)) {

    // Invalid:

    return;

  }

  numCount++;

  sumSoFar += num;

  const mean = sumSoFar / numCount;

  output.textContent = 'Mean: ' + mean;

};

<div>Enter a number between 1 and 100:</div>

<input id="input"><button onclick="processNum()">submut</button>


<div id="output"></div>


查看完整回答
反对 回复 2021-09-17
  • 2 回答
  • 0 关注
  • 279 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号