JS全局变量在for循环中修改后未生效,平均值始终为0求助
全局变量修改后未生效,avg始终为0的问题排查
尽管变量为全局变量,但尝试修改其值时并未生效,代码如下:
let avg = 0 let total = 0 let courseNum = prompt("Enter the number of courses you have taken: "); let CourseInt = parseInt(courseNum); for (let index = 1; index <= CourseInt; index++) { const courses = prompt("Enter the grade for course #" + index + ':'); for (let i = 0; i < courses.length; i++) { if (parseInt(courses[i]) > 50) { total =+ courses[i]; } avg = total / courses.length; } } prompt("YOUR AVG: " + avg)执行后prompt弹窗显示平均值avg为0,请协助排查问题。
问题根源及修复方案
1. 赋值运算符写错了
代码里的total =+ courses[i];是致命错误:=+不是累加运算符,它等价于total = +courses[i],会把courses[i]转成数字后直接覆盖total的值,而非累加。正确写法是total += parseInt(courses[i]);,必须先把字符串转成数字再累加。
2. 核心逻辑错误:单门成绩不需要拆字符循环
用prompt获取单门课程成绩时,用户输入的是单个数字(比如85),但你用courses.length循环每个字符,把输入的数字拆成单个字符处理(比如输入85会拆成'8'和'5'),内层循环完全没必要,属于逻辑误用。
3. 平均值计算时机错误
现在每次处理单个字符就计算avg,还把输入字符串的长度当除数,完全不符合“平均分=总分数/课程数”的逻辑。应该等所有课程的有效成绩累加完成后,用总分数除以课程总数计算平均值。
修复后的完整代码
let avg = 0 let total = 0 let courseNum = prompt("Enter the number of courses you have taken: "); let CourseInt = parseInt(courseNum); // 先校验用户输入的课程数是否为有效正数 if (!isNaN(CourseInt) && CourseInt > 0) { for (let index = 1; index <= CourseInt; index++) { const gradeInput = prompt("Enter the grade for course #" + index + ':'); const grade = parseInt(gradeInput); // 只累加有效且大于50的成绩 if (!isNaN(grade) && grade > 50) { total += grade; } } // 计算平均值,避免出现除以0的情况 avg = total / CourseInt; } // 保留两位小数,显示更直观 prompt("YOUR AVG: " + avg.toFixed(2))
内容的提问来源于stack exchange,提问作者khalidkadoura
相关产品推荐
相关产品推荐

