My code works, but it only works for the initial cut values. I am supposed to use binary search algorithm in the getLetterGrade method to get the desired outcome but every time I do I only get the one outcome.
Spring bean class
public class Grade implements GradeI {
private String name;
private int[] gradeBoundary = {100, 90, 85, 80, 77, 73, 70, 0};
private String[] gradeLetter = {"A+", "A", "A-", "B+", "B", "B-", "F"};
private int count = 8;
//private int key = 50;
int result = Arrays.binarySearch(gradeBoundary, 80);
private String gradeLetterValue = null;
public Grade() {
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setGradeBoundary(int[] grade) {
this.gradeBoundary = grade;
}
public int[] getGradeBoundary() {
return gradeBoundary;
}
public void setGradeLetter(String[] gradeLet) {
this.gradeLetter = gradeLet;
}
public String[] getGradeLetter() {
return gradeLetter;
}
public void setCount(int count) {
this.count = count;
}
public int getCount() {
return count;
}
public String getLetterGrade(int numerical_grade) {
if (numerical_grade < 70) {
gradeLetterValue = "F";
} else if (numerical_grade < 73) {
gradeLetterValue = "B-";
} else if (numerical_grade < 77) {
gradeLetterValue = "B";
} else if (numerical_grade < 80) {
gradeLetterValue = "B+";
} else if (numerical_grade < 85) {
gradeLetterValue = "A-";
} else if (numerical_grade < 90) {
gradeLetterValue = "A";
} else if (numerical_grade < 100) {
gradeLetterValue = "A+";
}
return gradeLetterValue;
}
}
Main class
public class GradeApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("GradeBeans.xml");
Grade obj = (Grade) context.getBean("grade-bean");
for(int i =66; i <=100; i++) {
System.out.println(i+":"+ obj.getLetterGrade(i));
}
}
}
The desired outcome is like this :
66:F 67:F 68:F 69:F 70:B-
71:B- 72:B- 73:B 74:B 75:B
76:B 77:B+ 78:B+ 79:B+ 80:A-
81:A- 82:A- 83:A- 84:A- 85:A
86:A 87:A 88:A 89:A 90:A+
91:A+ 92:A+ 93:A+ 94:A+ 95:A+
96:A+ 97:A+ 98:A+ 99:A+ 100:A+
Below is my attempt with binary search and the only outcome I get is B+ when I run this code in the main program
public String getLetterGrade(int numerical_grade) {
int result = Arrays.binarySearch(gradeBoundary, 0, 7, 80);
if (result == 6) {
gradeLetterValue = "F";
} else if (result == 5) {
gradeLetterValue = "B-";
} else if (result == 4) {
gradeLetterValue = "B";
} else if (result == 3) {
gradeLetterValue = "B+";
} else if (result == 2) {
gradeLetterValue = "A-";
} else if (result == 1) {
gradeLetterValue = "A";
} else if (result == 0) {
gradeLetterValue = "A+";
}
return gradeLetterValue;
}
My question is how can I use binary search to get the desired outcome
UPDATE
The solution that worked best for me was to create my own binary search algorithm and use it to find the letter like the code below
public String getLetterGrade(int numerical_grade) {
int low = 0;
int index = count - 1;
int max = (low + index) / 2;
while (low < index - 1) {
max = (low + index) / 2;
if (this.gradeBoundary[max] <= numerical_grade)
index = max;
else
low = max;
}
if (low == index - 1) max = low;
return gradeLetter[max];
}