寻求协助分配平均一系列成绩

时间:2014-04-14 22:38:45

标签: java arrays

我会复制/粘贴作业,然后是我迄今为止所取得的进展。我真的不是在找人做任务,只有一些帮助指出我在哪里出错了?该程序正在运行而没有错误,但是当它只返回一个时,它会为学生返回多个结果。我可以修改成绩并让它产生不同的结果,所以我知道数学正在完成,但我不知道为什么它为一个学生提供多个(和不同的)结果。我一直在检查代码,无法确定我哪里出错了。我最好的猜测是它在OutputGrade方法中的某个地方,我找不到它。

说明:

使用以下实例变量创建名为student的Java类: •private String studentName; •private int []成绩; //一系列成绩 包括setter和getter方法来设置和获取这两个属性。 grade实例数组变量的setter方法 - setGrades() - 应该采用单个参数,该参数是已填充等级的int数组。如果使用语句确保每个等级值,则应使用setGrades()在数组参数中有效(介于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 

谢谢你看看!

1 个答案:

答案 0 :(得分:5)

您忘记了break的{​​{1}}语句。如果你不是switch,它就会一直执行所有操作,直到阻止结束!

这有点令人困惑&#34;功能&#34;是C的遗留物,在大多数情况下,您希望使用breakcasebreak结束所有return