2 回答
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}`);
}
}
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>
添加回答
举报
