2014-04-14 55 views
0

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

说明:

创建一个名为学生有下列实例变量的Java类: •私人字符串studentName; •private int []等级; //数组 包含setter和getter方法来设置和获取这2个属性。等级实例数组变量 - setGrades()的setter方法应该采用单个参数,该参数是一个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名学生,setGrades()被调用1级值超出范围(小于0或大于100)。

代码:

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 

Student类:

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

小费,除非需要'switch'。你的'case'主体都是相同的减一个字符不同的(你有'letterGrade'的形式,所以你可以简单地用'System.out.println(新的StringBuilder())替换整个'switch'。append(studentName).append(“gets an”).append(letterGrade).append(“。”));' –

+0

你有一个好主意,但是这个任务的参数需要一个开关。尽管如此,我将把它归档以备后用。谢谢! – user3533863

回答

5

你忘了从switchbreak语句。如果你不是break,它会继续执行一切,直到块结束!

这有点混乱的“功能”是从C剩余,在大多数情况下,你会想用一个breakreturnthrow结束所有case秒。

+0

我坐在这里笑自己俯视。我觉得这很简单,但完全错过了。非常感谢你!我添加了break语句,它效果很棒! – user3533863

+0

为了扩展,从第一个'评估为'案例',所有后续的案例'也将被评估。这被称为“案例”,在多个“案例”共享功能时非常有用。但是,一旦案例完成,您往往会想要“休息”或“返回”。 –

+0

恕我直言,利用案件的贯穿落入“不必要的欺骗”之下 - 我想我已经在我的生活中找到了合法用途。如果返回/抛出,不需要'中断'好点。 –