评估数组平均值的问题
Issue with evaluating average of an array
我正在尝试显示一组测试分数,在它们之上是这些分数的平均值。这是我正在使用的代码:
var clickDisplayResults = function () {
$("results").value = "";
function calculate(scores) {
var i = 0, sum = 0, len = scores.length;
while (i < len) {
sum = sum + scores[i++];
};
return sum / len;
};
var average = calculate(scores);
$("results").value = "The average score is: " + parseInt(average) + "\n";
$("results").value += "High Score: " + Math.max.apply(null, scores) + "\n";
$("results").value += "Low Score: " + Math.min.apply(null, scores) + "\n" + "\n";
for (var i = 0; i < names.length; i++) {
$("results").value += names[i] + ", " + scores[i] + "\n";
};
然而,当我这样做时,在添加新分数后我得到的平均值在一个荒谬的范围内。
这里是加分代码:
var clickAddScore = function () {
if ( $("name").value == "" || $("score").value < 0 || $("score").value > 100 || isNaN($("score").value) ) {
alert("Please enter a valid name and score");
$("name").value = "";
$("score").value = "";
return false;
};
else {
names[names.length] = $("name").value;
scores[scores.length] = $("score").value;
$("name").value = "";
$("score").value = "";
};
};
如有任何建议,我们将不胜感激。
您正在处理字符串并将其视为数字
console.log("100" + 100);
您需要将字符串转换为数字。您可以使用 parseInt、parseFloat、Number 或 Unary plus。
您的代码效率有点低,因为您不断访问 DOM 的值,因此声明了一些变量。而你的else语句是错误的。
var clickAddScore = function() {
var studentName = $("name").value.trim();
var score = Number($("score").value);
if (studentName == "" || score < 0 || score > 100 || isNaN(score)) {
alert("Please enter a valid name and score");
} else {
names.push(studentName);
scores.push(score);
}
$("name").value = "";
$("score").value = "";
}
我正在尝试显示一组测试分数,在它们之上是这些分数的平均值。这是我正在使用的代码:
var clickDisplayResults = function () {
$("results").value = "";
function calculate(scores) {
var i = 0, sum = 0, len = scores.length;
while (i < len) {
sum = sum + scores[i++];
};
return sum / len;
};
var average = calculate(scores);
$("results").value = "The average score is: " + parseInt(average) + "\n";
$("results").value += "High Score: " + Math.max.apply(null, scores) + "\n";
$("results").value += "Low Score: " + Math.min.apply(null, scores) + "\n" + "\n";
for (var i = 0; i < names.length; i++) {
$("results").value += names[i] + ", " + scores[i] + "\n";
};
然而,当我这样做时,在添加新分数后我得到的平均值在一个荒谬的范围内。
这里是加分代码:
var clickAddScore = function () {
if ( $("name").value == "" || $("score").value < 0 || $("score").value > 100 || isNaN($("score").value) ) {
alert("Please enter a valid name and score");
$("name").value = "";
$("score").value = "";
return false;
};
else {
names[names.length] = $("name").value;
scores[scores.length] = $("score").value;
$("name").value = "";
$("score").value = "";
};
};
如有任何建议,我们将不胜感激。
您正在处理字符串并将其视为数字
console.log("100" + 100);
您需要将字符串转换为数字。您可以使用 parseInt、parseFloat、Number 或 Unary plus。
您的代码效率有点低,因为您不断访问 DOM 的值,因此声明了一些变量。而你的else语句是错误的。
var clickAddScore = function() {
var studentName = $("name").value.trim();
var score = Number($("score").value);
if (studentName == "" || score < 0 || score > 100 || isNaN(score)) {
alert("Please enter a valid name and score");
} else {
names.push(studentName);
scores.push(score);
}
$("name").value = "";
$("score").value = "";
}