首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript Average数组

Javascript Average数组
EN

Stack Overflow用户
提问于 2012-11-20 23:10:20
回答 4查看 14.2K关注 0票数 5

这是我的第一篇文章。我正在写一个程序,从四个输入框中获取输入,找出这四个输入框的总和,并求出平均值。当我这样做时,我得到了一个NaN错误,有人能指出我哪里错了吗?谢谢

代码语言:javascript
复制
<html>
<head>
<title> Average marks </title>

<script type = "text/javascript">

function average(form)
{

scores = new Array(4)

scores [0] = form.mark1.value
scores [0] = new Number(scores[0])
scores [1] = form.mark2.value
scores [1] = new Number(scores[1])
scores [2] = form.mark3.value
scores [2] = new Number(scores[2])
scores [3] = form.mark4.value
scores [3] = new Number(scores[3])


var Sum = 0
var average

for(var x = 0; x < scores.length; x ++)
{
Sum = Sum + scores[x]
average = Sum / scores[x]
}



document.write("The sum of the marks is equal to " + Sum + "<br>")
document.write("The average of these marks is equal to " + average + "<br>")


}

</script>


</head>

<body>

<form>
Enter the first mark : <input type = "text" name="mark1"> <br>
Enter the second mark : <input type = "text" name="mark2"> <br>
Enter the third mark : <input type = "text" name="mark3"> <br>
Enter the fourth mark : <input type = "text" name="mark4"> <br>

<input type = "submit" value = "submit" onclick="average(this.form)">
</form>


</body>
</html>
EN

回答 4

Stack Overflow用户

发布于 2012-11-20 23:22:17

欢迎使用Stackoverflow :)我们很乐意帮助您更好地学习我们的工具。关于该算法,只需注意一点:将average计算命令移出循环:

代码语言:javascript
复制
for(var x = 0; x < scores.length; x ++)
{
  Sum = Sum + scores[x];  //or Sum += scores[x];
}

average = Sum / scores.length;  //length of the array scores is in scores.length

我会使用parseInt()而不是new Number(),因为new Number()会创建一个对象,而parseInt()会给出实际的文字值作为结果。(更好的性能)。

顺便说一句,别忘了把var放在每个变量定义之前,除非你想让它们被全局访问(这不是个好主意)。您在处理除scores之外的所有变量时都做得很好。定义应该是var scores,尽管这不是此错误的来源。

另外一点:你可以使用isNaN()函数来检查parseInt()的结果。如果你的数字可以有小数点,你也可以使用parseFloat()

如果从字符串到数字的转换失败,这两个函数的结果都是NaN (而不是数字)。

最后,我认为用指定的长度定义数组是个好主意。它提高了代码的可读性。然而,这在Javascript中是不必要的,因为它会在运行时自动增加/减少数组的长度,所以您不必事先决定它应该有多长。它可以是一件好事,也可以是件坏事,这取决于你如何使用它。但一般来说,您可以使用var myarr=[];而不是var myarr= new Array();。但是,当您想要提示其他开发人员发生了什么时,您也可以指定数组长度:var myarr=new Array(4);

使用Stackoverflow的最后一点是:请接受最佳答案,并“向上投票”其他有用的答案。这样一来,你会得到一个分数,其他人也一样。

祝好运

票数 7
EN

Stack Overflow用户

发布于 2012-11-20 23:19:30

你没有以正确的方式平均。您可以通过总和(在循环之外)除以标记数来获得平均值。

另外:

  1. 不要使用new Array(4)。在JavaScript中预定义数组长度是不必要的(而且可能会损害可读性和performance).
  2. Don't使用new Number()。这将创建一个Number对象,这是一件可怕的事情,会在某个时间点造成严重破坏。使用Number(yourString)来强制转换。
  3. 我强烈建议您在未声明的end语句末尾加上分号。(请打开严格模式!)

不管怎么说,这可能是这样的:

代码语言:javascript
复制
function average(form) {
    var scores = [ // Array literal!
        Number(form.mark1.value), // You could also use a leading +
        Number(form.mark2.value),
        Number(form.mark3.value),
        Number(form.mark4.value)
    ];

    var sum = 0;

    for(var i = 0; i < scores.length; i++) {
        sum += scores[i];
    }

    var average = sum / scores.length;

    // etc.
}
票数 2
EN

Stack Overflow用户

发布于 2012-11-20 23:18:37

构建分数数组的方法是不必要的复杂。你可以这样做:

代码语言:javascript
复制
scores [0] = form.mark1.value;
scores [1] = form.mark2.value;
scores [2] = form.mark3.value;
scores [3] = form.mark4.value;

那么在你的平均计算中就会有一个错误。计算平均值的正确方法是将所有值相加,然后将它们除以值的数量一次。

代码语言:javascript
复制
for(var x = 0; x < scores.length; x ++)
{
    Sum = Sum + scores[x];
}
average = Sum / scores.length;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13476130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档