我正在尝试制作一个程序,该程序会返回您放入其中的任何数字等级的字母等级但是java一直告诉我我错过了一个返回语句。我已经尝试将char更改为void到int但没有一个工作。我仍然是新手,所以任何帮助都会受到赞赏。
class Grades
{
public static char getGrade(int x)
{
char A, B, C, D, F;
if((x>=90) && (x<=100))
return 'A';
if((x>=80) && (x<=89))
return 'B';
if((x>=70) && (x<=79))
return 'C';
if((x>=65) && (x<=69))
return 'D';
if(x<65)
return 'F';
}
public static char getGrade(int y, int z)
{
int w = ((y + z)/2);
return getGrade(w);
}
public static void main(String[] args)
{
System.out.println("64 gets the grade " + getGrade(64));
System.out.println("99 gets the grade " + getGrade(99));
System.out.println("73 and 91 gets the grade " + getGrade(73,91));
}
}
每次我使用此代码时,我总会收到错误:
Grades.java:17:错误:缺少return语句 } 这是为什么?
答案 0 :(得分:1)
您无法保证从if语句中返回任何内容。您必须添加else
或返回一些默认值。
如果要保持代码相同,请将return 'F';
放在方法的末尾。无需检查它是否为F;这是消除。
例如,这意味着代码看起来如下。
public static char getGrade(int x) {
if((x>=90) && (x<=100)) {
return 'A';
}
if((x>=80) && (x<=89)) {
return 'B';
}
if((x>=70) && (x<=79)) {
return 'C';
}
if((x>=65) && (x<=69)) {
return 'D';
}
return 'F';
}
作为替代方案,请考虑包含else if
语句,因为这会使这一点更清晰。
答案 1 :(得分:1)
你应该有100%的概率返回一些东西,但这不是这种情况。
public int returnAnInt(int a){
if (a > 0) return 10;
}
此代码不起作用,因为a
始终优于0
并不保证。想象一下将-1
作为参数..它会返回什么?
检查更正:
public int returnAnInt (int a){
if (a > 0) 10;
else return 0;
}
因为你预见到了所有的可能性,所以会编译。
您可以在此设置F
作为默认返回值:
public static char getGrade(int x)
{
if((x>=90) && (x<=100))
return 'A';
if((x>=80) && (x<=89))
return 'B';
if((x>=70) && (x<=79))
return 'C';
if((x>=65) && (x<=69))
return 'D';
else
return 'F';
}
它会在这种情况下起作用,但在大多数情况下并不是最佳的。您可以根据自己的代码找到最佳修正。
我在这里给了你正确的道路。
答案 2 :(得分:0)
编译器无法确保返回。看看下面的例子:
public boolean mod2(int a){
if(a % 2 == 0)
return true;
if(a % 2 != 0)
return false;
}
此方法将返回任何给定值,但编译器只能检查snytax而不是语义。因此代码不可编译。
如果以上所有语句都不匹配,您需要类似默认大小写的内容。 使用上面的代码将是:
public boolean mod2(int a){
if(a % 2 == 0)
return true;
else
return false;
}
答案 3 :(得分:0)
请注意,您可以使用TreeMap避免重复成绩边界:
public static char getGrade(int x) {
NavigableMap<Integer, Character> grades = new TreeMap<Integer, Character>();
grades.put(90, 'A');
grades.put(80, 'B');
grades.put(70, 'C');
grades.put(65, 'D');
grades.put(Integer.MIN_VALUE, 'F');
return grades.floorEntry(x).getValue();
}
如果您知道数字等级是非负数,则可以将Integer.MIN_VALUE替换为0以提高可读性。
另一方面,如果您希望该方法拒绝高于100的数字等级,则需要在方法的顶部添加一些验证。
如果等级计算对性能至关重要,最好只在getGrade方法之外的某处初始化地图。