Javascript平均数组

时间:2012-11-20 15:10:20

标签: javascript

这是我的第一篇文章。我正在编写一个程序来从四个输入框中获取输入,找出这四个输入框的总和并找到平均值。当我这样做时,我得到一个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 :(得分:7)

欢迎来到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

我会使用parseInt()代替new Number(),因为new Number()会创建一个对象,而parseInt()会为您提供实际的文字值。 (表现更好)。

顺便说一下,不要忘记在每个变量定义之前放置var,除非你想要它们被全局访问(坏主意)。除了scores之外,您对所有变量都做得很好。该定义应为var scores,但这不是此错误的来源。

另一点:您可以使用parseInt()功能检查isNaN()的结果。如果您的数字可以包含小数点,您也可以使用parseFloat()

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

最后,我认为您定义具有指定长度的数组是个好主意。它提高了代码的可读性。但是在Javascript中没有必要,因为它会在运行时自动增加/减少数组的长度,因此您不必事先决定应该多长时间。根据您的使用方式,这可能是好事还是坏事。但一般情况下,您可以使用var myarr=[];代替var myarr= new Array();。但是,当您想要提示其他开发人员正在进行的操作时,您也可以指定数组长度:var myarr=new Array(4);

使用Stackoverflow的最后一点:请接受最佳答案和“向上投票”其他有用的答案。这样你就可以得到一个分数和其他人。

祝你好运

答案 1 :(得分:2)

你没有以正确的方式平均...你得到总和(之外)的平均值除以标记数。

此外:

  1. 请勿使用new Array(4)。在JavaScript中预定义数组长度是不必要的(并且可能会损害可读性和性能)。
  2. 永远不要使用new Number()。这会创建一个Number 对象,这是一个可怕的事情,会在某个时间点造成严重破坏。使用Number(yourString)投射。
  3. 我强烈建议您在发言结尾处加分号。
  4. scores未声明。 (请打开严格模式!)
  5. 无论如何,这可能是这样的:

    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 :(得分:0)

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

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;

答案 3 :(得分:0)

要查找平均第一个计算总和(例如,用reduce来除,然后除以-就这么多

var Sum = scores.reduce((a,b)=> a+b);    // calculate sum
var average = Sum/scores.length;         // divide by number of elements

<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 = scores.reduce((a,b)=> a+b);
var average = Sum/scores.length;

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>