<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>
答案 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)
你没有以正确的方式平均...你得到总和(在之外)的平均值除以标记数。
此外:
new Array(4)
。在JavaScript中预定义数组长度是不必要的(并且可能会损害可读性和性能)。new Number()
。这会创建一个Number
对象,这是一个可怕的事情,会在某个时间点造成严重破坏。使用Number(yourString)
投射。scores
未声明。 (请打开严格模式!)无论如何,这可能是这样的:
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>