繁体   English   中英

缺少返回语句错误Java

[英]Missing Return Statement Error 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);
    }
}

从逻辑上讲,我们可以得出结论,如果nhamspam的倍数,则n是两者的倍数,或者恰好是两者之一。 我们可以从逻辑上得出结论,在外部if内,没有任何一种方法可以实现内部3个条件中的至少一个为true并执行return

但是Java编译器不是那么聪明。 它只是认为没有return过最后else if在该块,并得出结论,存在不具有执行路径return ,所以它给人的编译错误。

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

更换

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

else

它在逻辑上是等效的,并且编译器还将对每个执行路径都具有return语句感到满意。

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);
    }
}

在第一个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";
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM