Javascript平均数组

Javascript平均数组,javascript,Javascript,这是我的第一篇文章。我正在编写一个程序,从四个输入框中获取输入,求出这四个框的总和,并求出平均值。当我这样做时,我得到一个NaN错误,有人能指出我哪里出了错。谢谢 <html> <head> <title> Average marks </title> <script type = "text/javascript"> function average(form) { scores = new Array(4) scores [

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

<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>

平均分
函数平均值(表格)
{
分数=新数组(4)
分数[0]=form.mark1.value
分数[0]=新编号(分数[0])
分数[1]=form.mark2.value
分数[1]=新编号(分数[1])
分数[2]=form.mark3.value
分数[2]=新编号(分数[2])
分数[3]=form.mark4.value
分数[3]=新编号(分数[3])
var总和=0
var平均值
对于(变量x=0;x)
记录。书写(“这些标记的平均值等于“+平均值+”
) } 输入第一个标记:
输入第二个标记:
输入第三个标记:
输入第四个标记:

构建分数数组的方式非常复杂。您可以这样做:

scores [0] = form.mark1.value;
scores [1] = form.mark2.value;
scores [2] = form.mark3.value;
scores [3] = form.mark4.value;
那么你的平均计算就有错误了。计算平均值的正确方法是将所有值相加,然后将它们除以值的数量一次

for(var x = 0; x < scores.length; x ++)
{
    Sum = Sum + scores[x];
}
average = Sum / scores.length;
for(var x=0;x
你的平均方法不对。。。从总和(循环外部)除以分数得到平均值

此外:

  • 不要使用
    新数组(4)
    。在JavaScript中预定义数组长度是不必要的(并且会损害可读性和性能)
  • 永远不要使用新号码()。这会创建一个
    Number
    对象,这是一件可怕的事情,在某个时间点会造成严重破坏。使用
    Number(您的字符串)
    进行转换
  • 我强烈建议你在陈述的末尾加上分号
  • 分数
    未声明。(请打开严格模式!)
  • 不管怎样,下面是它的样子:

    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.
    }
    
    函数平均值(表格){
    var得分=[//数组文字!
    Number(form.mark1.value),//还可以使用前导字符+
    编号(表2.标记值),
    编号(表3.标记值),
    编号(表4.标记值)
    ];
    var总和=0;
    对于(变量i=0;i
    欢迎来到Stackoverflow:)我们很乐意帮助您更好地学习我们的工具。关于算法,请注意:将“平均计算”命令移到循环之外:

    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
    
    for(var x=0;x
    我会使用
    parseInt()
    而不是
    new Number()
    ,因为
    new Number()
    创建一个对象,而
    parseInt()
    会为您提供实际的文本值。(更好的性能)

    顺便说一句,不要忘了在每个变量定义之前加上
    var
    ,除非您希望全局访问它们(坏主意)。除了
    分数
    ,所有变量都做得很好。定义应为
    var分数
    ,尽管这不是此错误的来源

    另一点:您可以使用
    isNaN()
    函数检查
    parseInt()的结果是否正确。如果数字可以有小数点,还可以使用
    parseFloat()

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

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

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


    祝你好运

    找到第一次计算的平均值(例如,除以),然后除以-仅此而已

    var Sum = scores.reduce((a,b)=> a+b);    // calculate sum
    var average = Sum/scores.length;         // divide by number of elements
    
    
    平均分
    函数平均值(表格)
    {
    分数=新数组(4)
    分数[0]=form.mark1.value
    分数[0]=新编号(分数[0])
    分数[1]=form.mark2.value
    分数[1]=新编号(分数[1])
    分数[2]=form.mark3.value
    分数[2]=新编号(分数[2])
    分数[3]=form.mark4.value
    分数[3]=新编号(分数[3])
    var总和=得分。减少((a,b)=>a+b);
    var平均值=总和/分数。长度;
    记录。书写(“标记的总和等于“+sum+”
    ) 记录。书写(“这些标记的平均值等于“+平均值+”
    ) } 输入第一个标记:
    输入第二个标记:
    输入第三个标记:
    输入第四个标记:

    1)切勿使用
    新阵列
    。2) 切勿使用
    新号码
    。3) 始终在语句末尾使用分号。4) 其中一个分数是零吗?因为5)这不是你的平均水平。请参阅直接访问HTML itens了解平均水平:请,请,请参考MDN(,),而不是+1为综合答案,但:w3schools是一个糟糕的参考。()使用适当的参考,例如或。诚然,w3schools通常有一些很好的(非技术极客)解释,tryit也很好,但遗憾的是,它们的信息往往过时、不精确或最糟糕——完全错误。一个小的编辑:
    for(var x=0,l=scores.length;x