寻找无限循环中要求的数字的算术平均值
Finding arithmetic mean of numbers asked in an infinite loop
我需要达到的条件是:
- 脚本在无限循环中要求输入 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;
}
}
如果您不能使用数组,我想另一种方法是将值存储在对象中:
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);
}
您可以考虑使用适当的模式而不是 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>
可以逐步计算一组数字的平均值,而无需在任何地方保存所有数字。您只需要先前的平均值和已输入的数字计数。
考虑公式 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}`);
}
}
我需要达到的条件是:
- 脚本在无限循环中要求输入 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;
}
}
如果您不能使用数组,我想另一种方法是将值存储在对象中:
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);
}
您可以考虑使用适当的模式而不是 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>
可以逐步计算一组数字的平均值,而无需在任何地方保存所有数字。您只需要先前的平均值和已输入的数字计数。
考虑公式 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}`);
}
}