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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:40:30