Проблема в том, что всякий раз, когда я помещаю значение -1, оно возвращается как "Fail" вместо "Неверный код". "*
-1
равно < 40
,таким образом, ваше первое if
условие истинно. Это означает, что ваш код return ("Invalid mark");
выполняется, что завершает метод - ни один из остальной части кода не выполняется. return
не только устанавливает возвращаемое значение, но и продолжаетпоследующие операторы заканчивают вызов метода.
Также обратите внимание, что позже у вас возникает логическая ошибка, у вас есть серия else if
операторов, ведущих к else if (mark < 70)
, за которыми следует if (mark >= 70)
. >= 70
будет всегда истинным. Если бы mark
было < 70
, предыдущее условие if
было бы истинным, и вы бы никогда не достигли этого.
Правильный способ сделать это - проверить в порядке , возможно (в данном случае) от низшего к высшему, но, возможно, с проверкой «Недопустимая отметка».
Другие примечания:
- Вам не нужно
()
возвращаемых значений, return
не функция / методd. - Вам не нужно
else
, если вы делаете return
в if
телах. - Вы никогда не использовали
grade
, поэтому нет причин иметь егов коде
Итак:
public String calculateGrade(int mark) {
if (mark < 0 || mark > 100) {
return "Invalid mark";
}
if (mark < 40) {
return "Fail";
}
if (mark < 50) {
return "3rd";
}
if (mark < 60) {
return "2ii";
}
if (mark < 70) {
return "2i";
}
return "1st";
}
Или присвоение grade
и возврат его в конце вместо этого, что некоторые считают лучшей практикой (а другие считают ненужными усложнения):
public String calculateGrade(int mark) {
String grade; // ** Note I don't do = ""; I want the compiler to warn me if I try to use it without assigning to it
if (mark < 0 || mark > 100) {
grade = "Invalid mark";
}
else if (mark < 40) {
grade = "Fail";
}
else if (mark < 50) {
grade = "3rd";
}
else if (mark < 60) {
grade = "2ii";
}
else if (mark < 70) {
grade = "2i";
}
else {
grade = "1st";
}
return grade;
}
Заметьте, мне нужны были else
s, потому что я не return
в if
телах.