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
相关产品推荐
相关产品推荐

