我将复制/粘贴作业,然后复制到目前为止的进度。我的确不是要找人去做作业,而只是寻求一些帮助,以使我朝着正确的方向指出正确的方向?该程序正在运行,没有错误,但是当它仅应返回一个学生时,它将为学生返回多个结果。我可以修改成绩并产生不同的结果,所以我知道数学已经完成,但是我不知道为什么它会给单个学生提供多个(不同的)结果。我一直在检查代码,无法确定我要去哪里。我最好的猜测是它在OutputGrade方法中的某个地方,我只是找不到它。

说明:

使用以下实例变量创建一个名为Student的Java类:
•私有字符串studentName;
•私人int []级; //一系列成绩
包括setter和getter方法来设置和获取这两个属性。成绩实例数组变量setSetes()的setter方法应采用单个参数,该参数是一个已填充成绩的int数组。setGrades()如果要确保每个成绩值都应使用语句,则应使用setGrades() array参数中的有效值(0到100之间)-您将需要将循环与if语句结合使用,以高效地执行此操作。如果成绩超出范围,则setGrades()应将该成绩值设置为0。传递给setGrades()的数组必须保留3到5个成绩。
包括一个名为outputGrade()的方法,该方法可以对学生成绩数组中的所有成绩进行平均,然后根据以下条件使用switch语句输出成绩转换:
•对于0到59之间的值,您的程序应输出:“学生未通过该课程”
•对于60-69之间的值,您的程序应输出:“学生获得D”
•对于70-79之间的值,您的程序应输出:“学生得到C”
•对于80-89之间的值,您的程序应输出:“学生得到B”
•对于90-100之间的值,您的程序应输出:“学生获得A”
其中“学生”是学生的实际姓名。
创建一个名为TestStudent的测试类,该类实例化3个学生并设置他们的姓名和等级,然后为每个学生调用outputGrade()。对于您的3个学生,1个必须具有3年级,1个必须具有4年级,1个必须具有5年级。这样一来,您将有3种不同的数组大小可以传递给setGrades()。确保对于1个学生,使用1个超出范围(小于0或大于100)的成绩值调用setGrades()。

码:

public class TestStudent {

    public static void main(String[] args) {

        Student student1 = new Student();
        int[] grades1 = {15, 50, 5};
        student1.setStudentName("Ernest Craft");
        student1.setGrades(grades1);
        student1.outputGrades();

        Student student2 = new Student();
        int[] grades2 = {95, 95, 95, 95};
        student2.setStudentName("Steve Jones");
        student2.setGrades(grades2);
        student2.outputGrades();

        Student student3 = new Student();
        int[] grades3 = {105, -1, 72, 90, 88};
        student3.setStudentName("Mary Smith");
        student3.setGrades(grades3);
        student3.outputGrades();

    } // end method main
} // end class TestStudent


学生班:

public class Student {

    private String studentName;
    private int[] grades;

    //constructor
    public Student() {
    }

    public void setStudentName(String name) {
        studentName = name;
    } // end method setStudentName

    public String getStudentName() {
        return studentName;
    } // end method getStudentName

    public void setGrades(int gradeArray[]) {
        grades = gradeArray;

        for (int i = 0; i < gradeArray.length; i++) {
            if (gradeArray[i] < 0 || gradeArray[i] > 100) {
                gradeArray[i] = 0;
            } // end if
        } // end loop
    } // end method setGrades

    public int[] getGrades() {
        return grades;
    } // end method getGrades

    public void outputGrades() {

        int gradesTotal = 0;
        int gradesAverage;
        char letterGrade;

        for (int i : grades) {
            gradesTotal += i;
        } // end loop

        gradesAverage = gradesTotal / (grades.length);

        if (gradesAverage >= 0 && gradesAverage <= 59) {
            letterGrade = 'F';
        } else if (gradesAverage >= 60 && gradesAverage <= 69) {
            letterGrade = 'D';
        } else if (gradesAverage >= 70 && gradesAverage <= 79) {
            letterGrade = 'C';
        } else if (gradesAverage >= 80 && gradesAverage <= 89) {
            letterGrade = 'B';
        } else {
            letterGrade = 'A';
        } // end if statement

        switch (letterGrade) {

            case 'A':
                System.out.println(studentName + " gets an A.");
            case 'B':
                System.out.println(studentName + " gets an B.");
            case 'C':
                System.out.println(studentName + " gets an C.");
            case 'D':
                System.out.println(studentName + " gets an D.");
            case 'F':
                System.out.println(studentName + " gets an F.");

        } // end switch
    } // end method outputGrades
} // end class Student


谢谢参观!

最佳答案

您忘记了break中的switch语句。如果不使用break,它将一直执行所有操作,直到代码块结束!

这个有点令人困惑的“功能”是C的遗留物,在大多数情况下,您都希望以casebreakreturn结尾所有throw

关于java - 寻求协助以平均分配一系列成绩,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23071638/

10-09 07:10