Для начала нельзя сравнивать строки с помощью оператора ==
.То, что он делает, это сравнивает фактические ссылки на объекты, т.е.для grade == "a"
он проверяет, являются ли grade
и "a"
одинаковыми объектами, но это не так.
Чтобы проверить содержимое строк на равенство, используйте.equals()
, т.е.grade.equals("a")
.
Другое дело, не должен ли средний балл быть средним из ваших общих баллов?то есть.gpa /= classes
после завершения цикла.
Кроме того, вместо использования double
для хранения fail
, переменной флага, позволяющей узнать, не произошел ли у субъекта предмет, используйте boolean
и установите для него значениеtrue
если оценка - F. Если говорить об этом утверждении if
, то оно не изменит input
, и предыдущее значение input
будет добавлено к gpa
вместо оценки сбоев, такой как 0.0
.
А как насчет неверного ввода?Это также приведет к увеличению gpa
на предыдущее значение input
.
EDIT: и использование некоторых else if
s вместо отдельных операторов if
,так как любое другое условие будет проверено, даже если одно условие проходит.то есть.Если grade.equals("a")
истинно, вы все равно будете без необходимости проверять, являются ли grade
также "b", "c", "d" и "f".
EDIT2: С этим списком условий, которые вы только что добавили, и тем, как у вас есть последний блок операторов if
, общее правило состоит в том, чтобы ваши более конкретные условия были выше более обобщенных, чтобы они не скрывались от обобщенных.то есть.Число 5 («Не соответствует критериям, gpa ниже 2,0 и имеет оценку F») затенено номером 3 («Не соответствует критериям, gpa ниже 2,0»), если вы сохраняете их в таком порядке, как указано в animuson.