我是 Java 新手,所以提前道歉。
我正在制作一种方法,获取学生的考试成绩(int mark)并返回成绩(String Grade)。但有时它会返回错误的成绩。
public String calculateGrade(int mark) {
String grade = "";
if (mark < 40) {
return ("Fail");
}
else if (mark < 50) {
return ("3rd");
}
else if (mark < 60) {
return ("2ii");
}
else if (mark < 70) {
return ("2i");
}
else if (mark >= 70) {
return ("1st");
}
else if (mark < 0) {
return ("Invalid mark");
}
else if (mark > 100) {
return ("Invalid mark");
}
return grade;
}
System.out.println(labExample.calculateGrade(50));
问题是,每当我输入值 -1 时,它都会返回“失败”而不是“无效代码”。超过 100 的情况也是如此,因为它返回“1st”而不是“无效代码”。
尽管我已经说明了如果成绩为 <0 或 >100 则返回什么,但它似乎忽略了它。
任何帮助或指示都会很棒。谢谢。
最佳答案
The problem is that whenever i put in a value -1 it returns as "Fail" instead of "Invalid code.""*
-1
是 < 40
,所以你的第一个 if
的条件为真。这意味着您的 return ("Invalid mark");
代码运行,这会终止该方法 - 其余代码均不会执行。 return
不仅设置返回值,还继续执行后续语句,它结束方法调用。
还要注意,稍后你有一个逻辑错误,你有一系列else if
导致 else if (mark < 70)
的语句接下来是 if (mark >= 70)
。那>= 70
将永远为真。如果mark
是< 70
,上一个if
条件为真,而你永远不会到达那里。
正确的方法是按顺序检查,可能(在本例中)从最低到最高,但可能会在前面检查“无效标记”。
其他说明:
- 您不需要
()
返回值周围,return
不是函数/方法。 - 您不需要
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
在那里,因为我不 return
输入if
尸体。
关于java - 为什么它返回错误的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58486523/