Decisions and if method
if-statement, java
Solution
You can define the mappings and rules separately:
public static enum Grade {
// Letter grades are A, B, C, D, and F
// Their numeric values are 4, 3, 2, 1, and 0
A(4),B(3),C(2),D(1),F(0);
public final double score;
private Grade(double d) {
this.score = d;
}
// Grades are possibly followed by + or –
// There is no F+ or F–
// a + increases the numeric value by 0.3, a – decreases it by 0.3
// However, an A+ has value 4.0
public double getModifiedScore(char sign) {
switch (sign) {
case '+':
return score + (score < 4 && score > 0 ? 0.3 : 0);
case '-':
return score + (score > 0 ? -0.3 : 0);
default:
throw new IllegalArgumentException("Invalid sign");
}
}
}
Then just use them (example assumes you have validated the input):
public static double getNumericGrade(String s){
Grade g = Grade.valueOf(s.substring(0, 1));
if(s.length() > 1){
return g.getModifiedScore(s.charAt(1));
}else {
return g.score;
}
}
Problem
Question in book: Write a program that translates a letter grade into a number grade. Letter grades are `A`, `B`, `C`, `D`, and `F`, possibly followed by `+` or `–`. Their numeric values are `4`, `3`, `2`, `1`, and `0`. There is no `F+` or `F–`. A `+` increases the numeric value by `0.3`, a `–` decreases it by `0.3`. However, an `A+` has value `4.0`. Enter a letter grade: `B-` The numeric value is `2.7`. Use a class Grade with a method `getNumericGrade`. So my question is : I know my code is right, I can run it. But I was curious whether there is a shortcut or a better version of this code that makes it look more professional and easier to read. Any suggestions or examples would greatly be appreciated. Code: ``` import java.util.Scanner; public class grade { private double numericValue = 0; private String grade = ""; public grade() { Scanner in = new Scanner(System. in ); System.out.print("Enter Grade: "); grade = in .nextLine(); } public double getNumericGrade() { if (grade.equals("A+") || grade.equals("A")) { numericValue = 4.0; } else if (grade.equals("A-")) { numericValue = 3.7; } else if (grade.equals("B+")) { numericValue = 3.3; } else if (grade.equals("B")) { numericValue = 3.0; } else if (grade.equals("B-")) { numericValue = 2.7; } else if (grade.equals("C+")) { numericValue = 2.3; } else if (grade.equals("C")) { numericValue = 2.0; } else if (grade.equals("C-")) { numericValue = 1.7; } else if (grade.equals("D+")) { numericValue = 1.3; } else if (grade.equals("D")) { numericValue = 1.0; } else if (grade.equals("F")) { numericValue = 0; } else { System.out.println("Letter not in grading system"); } return numericValue; } } ```