public static boolean gradeCalculator() {
double mark,student;
String grade = "";
double total = 0;
System.out.println("Enter number of students :");
student = scanner.nextDouble();
for(int i=0; i<student; i++){
System.out.println("Enter mark for student "+ (i+1) +" : ");
mark = scanner.nextDouble();
total = total + mark;
double average = total/student;
{
if(mark >=0 && mark <=39){
grade = "F" ;
}
else if(mark >=40 && mark <=49){
grade = "P";
}
else if(mark >=50 && mark <=59){
grade = "D";
}
else if(mark >=60 && mark <=69){
grade = "C";
}
else if(mark >=70 && mark <=79){
grade = "B";
}
else if(mark >=80 && mark <100){
grade = "A";
}
System.out.println( "Grade : " +grade);
}
}
System.out.println( "Average Mark : " +total/student);
System.out.println( "Average Grade : " );
System.exit(0);
return false;
}
我想计算学生的成绩,以及脚本末尾的平均成绩。但我想知道我如何使平均标记参考我之前在if-else语句中创建的等级。
答案 0 :(得分:0)
我建议将所有成绩保存在某个集合中。由于grade
是在循环中设置的,因此您无法访问它具有的任何值,而是循环后的最后一个值。这些值被覆盖,因为下次执行循环时,同一个变量被设置为另一个值。
答案 1 :(得分:0)
我建议grade
为enum
:
public enum Grade {A, B, C, D, E, F};
Grade grade;
一个优点是,这清楚地说明了可能的值是什么。另一个优点是每个枚举值都有一个与之关联的整数,允许您进行平均计算。
您可以从enum
获取整数值,如下所示:
int gradeAsInt = grade.ordinal();
在循环中,通过在每次迭代中执行此操作来计算这些整数的总和:
sumOfGrades += grade.ordinal();
在循环之后将总和除以总数并将其转换回enum
(正确舍入为0.5):
Grade averageGrade = Grade.values[(sumOfGrades + 0.5) / student];
当然,你应该先做范围检查。
答案 2 :(得分:0)
我认为那里有不同的问题,+
首先,如果您需要添加新内容以添加新成绩或删除成绩,则需要修改不遵循开放/封闭原则的if-else
。此外,每个if-else
句子都会传播有关成绩的知识,并将其作为简单字符串("F"
,"P"
,"D"
,...)进行检索。想象一下,您需要稍后管理成绩,您需要再次使用其他if-else
和.equals("F")
,.equals("P")
。然后,假设您需要按"F"
重命名成绩"X"
。然后,你需要找到所有的&#34; F&#34;并写"X"
,当然你的IDE对这项任务非常有用,但这不是一个好习惯。
我认为等级是一个代表和陈述的常量列表,所以我认为你应该看看enumerates。这对您来说很有意思,因为它将允许以简单的方式表示和管理范围。
查看枚举java链接,其中开发了Planet示例。但是,对于您的情况来说可能过于复杂,所以请看一下answer。在那里,您会找到一个描述范围的枚举Wealth
。所以,我认为这对你来说很有意思。