Вы можете использовать переключатель заявление, если вы действительно хотите, с помощью перечислений для представления различных марок:
public class Main {
public static void main(String[] args) {
double gpa = Double.parseDouble(args[0]);
Grade grade = Grade.getGradeFromGPA(gpa);
switch (grade) {
case FIRST_CLASS: System.out.println("First class Hons"); break;
case TWO_ONE: System.out.println("upper Second class Hons"); break;
case TWO_TWO: System.out.println("Lower Second class Hons"); break;
case PASS: System.out.println("Pass"); break;
case FAIL: System.out.println("Fail"); break;
default: System.out.println("Invalied gpa");
}
}
private enum Grade {
FIRST_CLASS(3.5, 4),
TWO_ONE(3, 3.49),
TWO_TWO(2.5, 2.99),
PASS(2.49, 2),
FAIL(0, 1.99);
private final double minGPA;
private final double maxGPA;
Grade(final double minGPA, final double maxGPA) {
this.minGPA = minGPA;
this.maxGPA = maxGPA;
}
static Grade getGradeFromGPA(double gpa) {
for (Grade grade : Grade.values()) {
if (grade.maxGPA >= gpa && grade.minGPA <= gpa) {
return grade;
}
}
//invalid GPA
return null;
}
}
}
Примечания:
- я исправил Integer.parseInt в Double.parseDouble
- Я оставил логику так, как она была в вашем вопросе, но она не оставляет сомнений в том, что происходит с входами, такими как 3.499 - это вернет недопустимый класс, поскольку он скользит между максимумом TWO_ONE и min FIRST_CLASS
Если вы действительно использовали перечисление, вы, вероятно, не использовали бы переключатель, чтобы распечатать оценку. Вам будет лучше иметь строку, представляющую описание класса и печать, т.е.:
public static void main(String[] args) {
double gpa = Double.parseDouble(args[0]);
Grade grade = Grade.getGradeFromGPA(gpa);
if (grade != null) {
System.out.println(grade.description);
} else {
System.out.println("Invalied gpa");
}
}
private enum Grade {
FIRST_CLASS(3.5, 4, "First class Hons"),
TWO_ONE(3, 3.49, "upper Second class Hons"),
TWO_TWO(2.5, 2.99, "Lower Second class Hons"),
PASS(2.49, 2, "Pass"),
FAIL(0, 1.99, "Fail");
private final double minGPA;
private final double maxGPA;
private final String description;
// remaining code omitted for brevity
}
Мораль этой истории является то, что вы не должны позволить своему программирования молоток (в данном случае переключатель заявление) диск вашего дизайна. Ваш код должен отражать проблему, которую вы пытаетесь решить, вы не должны ставить свою проблему в форму вашего кода.
Вы не можете использовать оператор switch для сравнения double. Вместо этого используйте инструкции if-else. – Kon
без дуги, как создать этот код – Deshika22
@ Deshika22: Почему вы так стремились использовать оператор 'switch'? Это просто не подходит для диапазонов. –