成绩册项目:学生数组无法显示及取消输入无效问题求助
成绩册项目问题修复方案
问题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
相关产品推荐
相关产品推荐

