数组并显示为未定义

Arrays and showing as undefined

本文关键字:未定义 显示 数组      更新时间:2023-09-26

我的项目是根据学生人数和分数制作班级报告。在我的项目中,我需要显示学生的姓名和分数、平均成绩以及班级中最低和最高成绩。在我的代码中,当我到达发布班级报告的部分时,最后一个学生的姓名和分数被读取为未定义和未定义。然后它会影响我的平均值,该平均值被读取为 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++) { ... }
这意味着您正在访问名称[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 开始所有控制循环并使用 < 而不是 <= 进行测试。

为此更改方法"InputintoArrays"

函数 InputintoArrays(x){

    for(y=1;y<=x;y++){
        Names[y]=$("#txtName" + y).val();
        Marks[y]=parseInt($("#txtMark" + y).val());
    }
};

唯一的变化是 y<=x。