You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

成绩册项目:学生数组无法显示及取消输入无效问题求助

成绩册项目问题修复方案

问题1:学生数组无法正常显示的修复

你的代码在学生数组的定义和操作上存在多处核心错误:

  • 错误地给数组直接设置属性(student.firstName),数组是集合类型,不能直接通过数组变量设置对象属性,应每次创建独立的学生对象。
  • 错误地将单个属性值push到数组中,而非完整的学生对象,导致数组结构完全混乱,无法正确存储学生信息。
  • 遍历数组时误用函数名studentArray代替数组变量,循环条件i < studentArray完全错误,应判断数组长度students.length。

问题2:点击取消后仍持续输入的修复

点击浏览器prompt的取消按钮会返回null,但你的判断逻辑完全失效:

  • 你在所有输入完成后判断student === null,但student是数组类型,永远不会等于null,无法触发终止逻辑。
  • 必须在每个prompt返回后立即检查,如果是null或用户输入e,直接终止整个输入循环。

修复后的完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>成绩册</title>
</head>
<body>
    <script>
        let grade = 0;
        studentArray();    

        function studentArray(){
            // 定义空的学生数组,而非带空对象的数组
            const students = [];

            while(true){
                // 录入姓名后立即检查取消或终止指令
                const firstName = prompt("Enter First Name : ");
                if(firstName === "e" || firstName === null){
                    break;
                }
                const lastName = prompt("Enter Last Name  : ");
                if(lastName === "e" || lastName === null){
                    break;
                }
                const studentID = prompt("Enter ID         : ");
                if(studentID === "e" || studentID === null){
                    break;
                }
                // 调用成绩计算函数,同时判断是否中途取消
                const examGrade = calculateExamgrade(grade);
                if(examGrade === null){
                    break;
                }

                // 创建完整学生对象并添加到数组
                students.push({
                    firstName: firstName,
                    lastName: lastName,
                    ID: studentID,
                    Exams: examGrade
                });
            }

            // 正确遍历并输出学生数组
            for(let i = 0; i < students.length; i++){
                console.log(`学生 ${i+1}:`, students[i]); 
            }
        }

        function calculateExamgrade(grade){
            let TestGrades = [];
            while(true){
                let input = prompt("Add Grades (输入e或取消结束)")
                if(input === "e" || input === null){
                    break;
                }
                // 过滤非数值输入
                const numGrade = Number(input);
                if(!isNaN(numGrade)){
                    TestGrades.push(numGrade);
                }
            }        
            // 无成绩输入时返回null终止流程
            if(TestGrades.length === 0){
                return null;
            }
            // 计算成绩总和
            let sum = 0;
            for(let i = 0; i < TestGrades.length; i++){
                sum += TestGrades[i];
            }
            grade = Math.round(sum/TestGrades.length);
            // 输出等级并返回分数
            switch(true){
                case grade >= 90:
                    console.log(`平均成绩${grade},等级A`);
                    return grade;
                case grade <= 89 && grade >= 80:
                    console.log(`平均成绩${grade},等级B`);
                    return grade;
                case grade <= 79 && grade >= 70:
                    console.log(`平均成绩${grade},等级C`);
                    return grade;
                case grade <= 69 && grade >= 60:
                    console.log(`平均成绩${grade},等级D`);
                    return grade;
                case grade <= 59:
                    console.log(`平均成绩${grade},等级不及格`);
                    return grade;
            }
        }
    </script>
</body>
</html>

内容的提问来源于stack exchange,提问作者xRGx901x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:50:22