我的项目是根据学生数量和分数制作类(class)报告。在我的项目中,我需要显示学生的姓名和分数、平均分以及类(class)中的最低和最高成绩。在我的代码中,当我到达发布类(class)报告的部分时,最后一个学生的姓名和分数被读取为未定义和未定义。然后它会影响我的平均值,即 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);
};
最佳答案
您的循环通常编写如下:
for (y = 1; y <= Marks.length; y++) { ... }
这没问题,但大多数程序员都会这样做:
for (y = 0; y < Marks.length; y++) { ... }
这意味着您正在访问 Names[1]、Names[2] 和 Names[3](而不是通常更正确的 Names[0]、Names[1] 和 Names[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 开始所有控制循环并使用 <
进行测试。而不是<=
.
关于javascript - 数组并显示为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34834426/