我的项目是根据学生和分数量制作课程报告。在我的项目中,我需要显示班级中的学生姓名和分数,平均分,以及最低和最高分。在我的代码中,当我到达发布课程报告的部分时,最后一个学生的姓名和标记被读取为未定义和未定义。然后它影响我的平均值,读作NaN和最低和最高标记。如果有人能修复我的代码那将是惊人的!我非常感谢对我做错的解释。
<script type="text/javascript">
var Names = [];
var Marks = [];
var sum = 0;
var average = 0;
var lowest = 99999999;
var lowestStudent;
var highest = -10000000;
var highestStudent;
$("#btnBoxes").click(function(){
$("#divOutput1").hide();
var number = GetInteger("txtNumber");
if (number >= 1){
GenerateTextandButton(number);
$("#btnReport").click(function(){
$("#divOutput2").hide();
InputintoArrays(number);
CalculateAverage();
ChecklowestMark();
CheckhighestMark();
Report();
});
}else{
$("#divOutput2").html("Please insert a number greater than 1.");
}
});
function GetInteger(num){
var number = parseInt($("#"+ num).val());
if(isNaN(number) === true){
return 0;
}else{
return number;
}
};
function GenerateTextandButton(x){
for(y=1;y<=x;y++){
$("#divOutput2").append("Student " + y + "<br><input type='text' id='txtName" + y + "' value='Insert Name'><br><input type='text' id='txtMark" + y + "' value='Insert Mark'><br><br>");
}
$("#divOutput2").append("<br><input type='button' id='btnReport' value='Generate'>");
};
function InputintoArrays(x){
for(y=1;y<x;y++)
Names[y]=$("#txtName" + y).val();
Marks[y]=parseInt($("#txtMark" + y).val());
}
};
function CalculateAverage(){
for(y=1;y<=Marks.length;y++){
sum = sum + Marks[y];
}
average = sum / Marks.length;
};
function ChecklowestMark(){
for(y=1;y<=Marks.length;y++){
if(Marks[y] <= lowest){
lowest = Marks[y];
lowestStudent = Names[y];
}
}
};
function CheckhighestMark(){
for(i=1;i<=Marks.length;i++){
if(Marks[i] >= highest){
highest = Marks[i];
highestStudent = Names[i];
}
}
};
function Report(){
$("#divOutput3").html("<b>Marks:</b> <br><br>");
for(y=1;y<=Marks.length;y++){
$("#divOutput3").append("<i>" + Names[y] + '</i>: ' + Marks[y] + "<br>");
}
$("#divOutput3").append("<br><u>Average Mark:</u> " + average.toFixed("2"));
$("#divOutput3").append("<br><u>Lowest Mark:</u> <i>" + lowestStudent + "</i> " + lowest);
$("#divOutput3").append("<br><u>Highest Mark:</u> <i>" + highestStudent + "</i> " + highest);
};
答案 0 :(得分:0)
您的循环通常按如下方式编写:
for (y = 1; y <= Marks.length; y++) { ... }
这没关系,但大多数程序员都会这样做:
for (y = 0; y < Marks.length; y++) { ... }
这意味着您正在访问名称[1],名称[2]和名称[3](而不是名称[0],名称[1]和名称[2],这在传统上更正确)。
现在,请注意您的功能
function InputintoArrays(x){
for(y=1;y<x;y++) {
Names[y]=$("#txtName" + y).val();
Marks[y]=parseInt($("#txtMark" + y).val());
}
};
您的控件显示for(y=1;y<x;y++)
而不是for(y=1;y<=x;y++)
,因此您没有插入最终名称。将y<x
更改为y<=x
,一切都应该没问题。或者甚至更好,从0开始所有控制循环并使用<
而不是<=
进行测试。
答案 1 :(得分:0)
更改此
的方法“InputintoArrays”函数InputintoArrays(x){
for(y=1;y<=x;y++){
Names[y]=$("#txtName" + y).val();
Marks[y]=parseInt($("#txtMark" + y).val());
}
};
唯一的变化是y&lt; = x。