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

Java中getGrade方法始终返回B+的问题调试求助

问题:选课系统中getGrade()方法始终返回B+,无法匹配实际分数

我用数组从文件读取数据实现选课功能,但运行getGrade()方法时,无论实际分数如何,始终返回B+,无法正确显示各分数对应的等级。

代码片段

读取文件与成绩转换部分

try {
    Scanner input = new Scanner(new FileInputStream(new File("src//inheritance//course.txt")));
    for(int i=0;i<=4;i++){
        
        courseCode[i] = input.nextLine();
        courseName[i] = input.nextLine();
        session[i] = input.nextLine();
        semester[i] = input.nextLine();
        mark[i] = input.nextLine();
        

        actualMark[i]=Integer.parseInt(mark[i]);
    }

} catch (FileNotFoundException ex){
    System.out.println("File not found");
}

getGrade()方法

public String getGrade() {
    for (int i = 0; i <= 4; ++i) {
        if (actualMark[i] >= 85) {
            return "A";
        } else if (actualMark[i] >= 75) {
            return "A-";
        } else if (actualMark[i] >= 70) {
            return "B+";
        } else if (actualMark[i] >= 65) {
            return "B";
        } else if (actualMark[i] >= 60) {
            return "B-";
        } else if (actualMark[i] >= 55) {
            return "C+";
        } else if (actualMark[i] >= 50) {
            return "C";
        } else if (actualMark[i] >= 45) {
            return "D";
        } else if (actualMark[i] >= 35) {
            return "E";
        } else if (actualMark[i] < 35) {
            return "F";
        }
    }
    return null;
}

主函数调用部分

class Tester3{
    public static void main(String[] args) {
        PersonProfile a = new PersonProfile("Theshue", "Male", "11/12/2003");
        Student b = new Student("Raju","Male", "11/12/2003");
        System.out.println(b.toString2());
        for(int i=0;i<=4;i++){
            System.out.println("The course code is "+ b.courseCode[i]);
            System.out.println("The course name is "+ b.courseName[i]);
            System.out.println("The session is "+ b.session[i]);
            System.out.println("The semester is "+ b.semester[i]);
            System.out.println("The mark is "+ b.actualMark[i]);
            System.out.println("The grade is " + b.getGrade());
        }
    }
}

运行输出

The name is Raju
The Gender is Male
The date is 11/12/2003
The course code is WMES1105
The course name is Principle of Information Systems
The session is 2009
The semester is 1
The mark is 74
The grade is B+
The course code is WXES1109
The course name is Systems and Computers Organization
The session is 2009
The semester is 1
The mark is 60
The grade is B+
The course code is WXES1112
The course name is Computing Mathematics 1
The session is 2009
The semester is 2
The mark is 82
The grade is B+
The course code is WXES1114
The course name is Programming I
The session is 2009
The semester is 2
The mark is 52
The grade is B+
The course code is GXEX1411
The course name is Ethnic Relations
The session is 2009
The semester is 2
The mark is 43
The grade is B+

问题原因

getGrade()方法逻辑错误:方法内部遍历整个actualMark数组,只要找到第一个满足条件的元素就直接返回对应等级。你的第一个课程分数是74,满足>=70的条件,所以每次调用getGrade()都会直接返回B+,完全忽略了当前要查询的是第i个课程的分数。

修复方案

修改getGrade()方法,让它接收一个索引参数,指定要查询的课程对应的分数索引,而非遍历整个数组:

修改后的getGrade()方法

public String getGrade(int index) {
    int mark = actualMark[index];
    if (mark >= 85) {
        return "A";
    } else if (mark >= 75) {
        return "A-";
    } else if (mark >= 70) {
        return "B+";
    } else if (mark >= 65) {
        return "B";
    } else if (mark >= 60) {
        return "B-";
    } else if (mark >= 55) {
        return "C+";
    } else if (mark >= 50) {
        return "C";
    } else if (mark >= 45) {
        return "D";
    } else if (mark >= 35) {
        return "E";
    } else {
        return "F";
    }
}

修改主函数中的调用代码

在循环里调用getGrade()时传入当前的索引i:

for(int i=0;i<=4;i++){
    System.out.println("The course code is "+ b.courseCode[i]);
    System.out.println("The course name is "+ b.courseName[i]);
    System.out.println("The session is "+ b.session[i]);
    System.out.println("The semester is "+ b.semester[i]);
    System.out.println("The mark is "+ b.actualMark[i]);
    // 传入当前索引i
    System.out.println("The grade is " + b.getGrade(i));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:52:01