Reputation: 89
I'm trying to make a method with takes a letter grade and returns a numeric grade. It only works tho for letters without pluses or minuses. Here's what I have:
public class Grade{
private String letterGrade;
private double numericGrade;
public Grade(String letterGrade)
{
this.letterGrade = letterGrade;
this.numericGrade = numericGrade;
}
public void getNumericGrade()
{
if (letterGrade.equals("A"))
{
numericGrade = 4.0;
}
else if (letterGrade.equals("B"))
{
numericGrade = 3.0;
}
else if (letterGrade.equals("C"))
{
numericGrade = 2.0;
}
else if (letterGrade.equals("D"))
{
numericGrade = 1.0;
}
else if (letterGrade.equals("F"))
{
numericGrade = 0.0;
}
if (letterGrade.substring(1).equals("+"))
{
numericGrade += .3;
}
else if (letterGrade.substring(1).equals("-"))
{
numericGrade -= .3;
}
System.out.println(numericGrade);
}
It gives 4.0 for "A", but it gives -0.3 for A-. Whats going on here?
Upvotes: 2
Views: 63
Reputation: 3621
Well, walk through it. If you pass "A-", then "A-" is not equal to "A", so you don't get the 4.0 (or the other letter grades). But you do then get the -0.3 for the minus...
Upvotes: 1
Reputation: 201477
Change your equals
to startsWith
calls (because "A+" is not equal to "A"), and do the initialization in your constructor (and initializing numericGrade
to itself should be giving you a warning). A getter should return the value (not set it). Something like,
private String letterGrade;
private double numericGrade;
public Grade(String letterGrade) {
this.letterGrade = letterGrade;
if (letterGrade.startsWith("A")) {
numericGrade = 4.0;
} else if (letterGrade.startsWith("B")) {
numericGrade = 3.0;
} else if (letterGrade.startsWith("C")) {
numericGrade = 2.0;
} else if (letterGrade.startsWith("D")) {
numericGrade = 1.0;
} else if (letterGrade.startsWith("F")) {
numericGrade = 0.0;
}
if (letterGrade.substring(1).equals("+")) {
numericGrade += .3;
} else if (letterGrade.substring(1).equals("-")) {
if (numericGrade > 0) {
numericGrade -= .3; // <-- or an F- is -0.3
}
}
}
public double getNumericGrade() {
// System.out.println(numericGrade);
return numericGrade;
}
Upvotes: 2