简单的return语句错误

时间:2015-09-27 22:01:55

标签: java return

我正在尝试制作一个程序,该程序会返回您放入其中的任何数字等级的字母等级但是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语句     } 这是为什么?

4 个答案:

答案 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方法之外的某处初始化地图。