缺少返回语句错误java

时间:2015-01-23 00:34:31

标签: java

public String getValue(int n) 
{
    if (n % ham == 0 || n % spam==0)
    {
        if(n % ham == 0 && n % spam == 0)
        {
            return "hamspam";
        }
        else if(n % ham == 0 && n % spam != 0)
        {
            return "ham";
        }
        else if(n % ham != 0 && n % spam==0)
        {
            return "spam";
        }
    }
    else
    {
        return Integer.toString(n);
    }
}

3 个答案:

答案 0 :(得分:1)

从逻辑上讲,我们可以得出结论,如果nhamspam的倍数,则n是两者的倍数,或者恰好其中之一他们俩。我们可以在逻辑上得出结论,在外部if内部没有办法,内部3个条件中的至少一个将是true并且return将被执行。

但Java编译器并不那么聪明。它只看到块中最后return之后没有else if,并得出结论是存在没有return的执行路径,因此它给出了编译错误。

逻辑上,如果前两个条件是false,则给定外if,第三个条件必须为真。

替换

else if(n % ham != 0 && n % spam==0)

else

它在逻辑上是等价的,并且编译器也会满意每个执行路径都有return语句。

答案 1 :(得分:1)

public String getValue(int n) 
{
    if (n % ham == 0 || n % spam==0)
    {
        if(n % ham == 0 && n % spam == 0)
        {
            return "hamspam";
        }
        else if(n % ham == 0 && n % spam != 0)
        {
            return "ham";
        }
        else if(n % ham != 0 && n % spam==0)
        {
            return "spam";
        }

        // this return is missing
        return "something";
    }
    else
    {
        return Integer.toString(n);
    }
}

答案 2 :(得分:0)

在您的第一个if语句中,您需要else子句或return值。

详细说明,如果:

if (n % ham == 0 || n % spam==0) //is true

 if(n % ham == 0 && n % spam == 0) // is false
    {
        return "hamspam";
    }
    else if(n % ham == 0 && n % spam != 0) //is false
    {
        return "ham";
    }
    else if(n % ham != 0 && n % spam==0)//is false
    {
        return "spam";
    }