javascript - 找到无限循环中询问的数字的算术平均值
问题描述
我需要达到以下条件:
- 脚本在无限循环中要求 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;
}
}
解决方案
一组数字的平均值可以增量计算,而无需将所有数字保存在任何地方。您所需要的只是先前的平均值和已输入的数字计数。
考虑公式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}`);
}
}
推荐阅读
- azure-blob-storage - 如何测试 Azure 存储生命周期?
- php - 如何将文件上传到两个不同的文件夹
- autodesk-forge - 如何获取 Autodesk Forge SFV2 格式的模型视图元数据?
- c# - 如何捕获两个日期选择器之间的天数
- jmeter - JMeter 在一段时间后关闭运行
- c# - 我无法在 MVC 中反序列化纬度和经度
- excel - 使用特定字符串获取属于每个单元格的行
- javascript - 为什么 Yarn 会修改对等依赖项中的包版本?
- android - ScrollView 和 PanGestureHandler 之间的跨处理程序交互
- python - 无法正确使用库 - 导入错误或功能无法识别