Без дополнительной информации мы можем только догадываться. Скорее всего, это проблема:
double x = i/100;
Если i
является целым числом, то это будет равно нулю для каждого i
меньше 100. Возможно, вы захотите деление с плавающей запятой.
double x = i/100.0;
Вы можете найти более простое решение с небольшой математикой. Во-первых, уравнение для расчета ГПД составляет
sum(grade_points_for_all_classes) / total_hours = GPA
"Оценка за класс" для любого класса
grade * credit_hours
Теперь мы хотим вычислить минимальную оценку (min_grade
) для всех новых классов, чтобы достичь нового desired_gpa
. Уравнение будет
(sum(grade_points_for_prev_classes) + (min_grade * sum(new_class_hours)) / total_hours = desired_gpa
Где total_hours
- общее количество кредитных часов (новые и старые классы). Решая для min_grade
получаем:
min_grade = (desired_gpa * total_hours - sum(grade_points_for_prev_classes)) / sum(new_class_hours)
* +1025 * Пример:
public static void main (String[] args) throws java.lang.Exception
{
double goalGPA = 3.25;
// Create an array of previous courses
double [][] prevCourses = {
{4, 4.0},
{4, 3.0},
{3, 2.0},
{2, 1.0}
};
// Calc grade points for prev courses
// and also total credit hours for prev courses
double gradePointsPrevCourses = 0;
int totalCreditHours = 0;
for (double [] c : prevCourses) {
gradePointsPrevCourses += c[0] * c[1];
totalCreditHours += c[0];
}
// Create an array of the new courses
// Not concerned with grades yet so fill with zero
double [][] newCourses = {
{4, 0.0},
{4, 0.0},
{3, 0.0},
{3, 0.0}
};
// Calc new credit hours
// and add to prev credit hours
int newCreditHours = 0;
for (double [] c : newCourses) {
newCreditHours += c[0];
}
totalCreditHours += newCreditHours;
// Solve
double minGrade = (goalGPA * totalCreditHours - gradePointsPrevCourses) / newCreditHours;
if (minGrade <= 4.0) {
System.out.println(String.format("You will need a %.2f in all classes to get a %.2f GPA", minGrade, goalGPA));
}
else {
System.out.println(String.format("Sorry, a %.2f is unobtainable.", goalGPA));
}
}