我正在使用从文件读取数据的数组创建一个选择

问题描述 投票:0回答:2

运行 getGrades() 方法时,它不断返回 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");
}
        
    }
    
    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());
    }
    }
  
}

输出= 名字叫拉朱 性别为男 日期是 2003 年 12 月 11 日 课程代码是WMES1105 课程名称:信息系统原理 会议时间为2009年 学期是1 分数是74 等级为B+ 课程代码是WXES1109 课程名称:系统与计算机组织 会议时间为2009年 学期是1 分数是60 等级为B+ 课程代码是WXES1112 课程名称:计算数学1 会议时间为2009年 学期是2 分数是82 等级为B+ 课程代码是WXES1114 课程名称:编程I 会议时间为2009年 学期是2 分数是52 等级为B+ 课程代码是GXEX1411 课程名称:民族关系 会议时间为2009年 学期是2 分数是43 等级为B+

问题是,当情况并非如此时,所有人的成绩都是b+。在输出中,对于 getGrades() 部分,我需要它显示每个标记的成绩,而不是仅显示 B+。我似乎无法解决这个问题。我尝试过使用chatgpt,但经过无数次尝试后,我觉得这段代码需要人性化的保存。需要帮助调试这个,谢谢

java arrays oop error-handling file-io
2个回答
0
投票

getGrade() 当前有一个循环(这是错误的) - 你想传入实际分数 [i] 并根据它计算出字符串。

public String getGrade(int grade) {
    if (grade >= 85) {
            return "A";
     else if (grade >= 75) {
            return "A-";
      } 
      ....

并更改调用代码传入

actualMark[i]


0
投票

您的代码的问题是您的 getGrade 方法始终根据actualMark 数组中的第一个分数返回成绩,并且不考虑其他分数。这是因为循环内有一个 return 语句,它退出循环并根据它遇到的第一个标记返回成绩。

要以另一种方式解决此问题,您可以迭代所有标记,计算每个标记的成绩,并将成绩存储在数组中。然后,您可以返回成绩数组或根据需要使用它。

public String[] getGrades() {
    String[] grades = new String[5]; // Assuming you have 5 marks
    
    for (int i = 0; i < 5; ++i) {
        if (actualMark[i] >= 85) {
            grades[i] = "A";
        } else if (actualMark[i] >= 75) {
            grades[i] = "A-";
        } else if (actualMark[i] >= 70) {
            grades[i] = "B+";
        } else if (actualMark[i] >= 65) {
            grades[i] = "B";
        } else if (actualMark[i] >= 60) {
            grades[i] = "B-";
        } else if (actualMark[i] >= 55) {
            grades[i] = "C+";
        } else if (actualMark[i] >= 50) {
            grades[i] = "C";
        } else if (actualMark[i] >= 45) {
            grades[i] = "D";
        } else if (actualMark[i] >= 35) {
            grades[i] = "E";
        } else if (actualMark[i] < 35) {
            grades[i] = "F";
        }
    }
    return grades;
}

对于你的主要:

for(int i = 0; i < 5; 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.getGrades()[i]);
}
© www.soinside.com 2019 - 2024. All rights reserved.