微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在每个if&else if和else语句中都有返回,而在代码末尾有一个return

如何解决在每个if&else if和else语句中都有返回,而在代码末尾有一个return

您好,我在代码末尾有一个关于多个return语句和单个return语句的快速问题。

从第一个代码开始,对于每个if,else if和else陈述使用return语句,这给了我一个错误。而且我以为我涵盖了所有可能的情况,但是它给我带来了错误提示

错误: 缺少返回语句行:16

什么原因导致此错误?另外,有什么方法可以改善我的第二个代码

public int caughtSpeeding(int speed,boolean isBirthday) {
    if (!isBirthday)
        if (speed <= 60)
            return 0;
        else if (speed <= 80)
            return 1;
        else 
            return 2;
    if (isBirthday)
        if (speed <= 65)
            return 0;
        else if (speed <= 85)
            return 1;
        else 
            return 2;
}

从第二个代码中,我可以摆脱错误

public int caughtSpeeding(int speed,boolean isBirthday) {
    int flag = 0;
    if (!isBirthday)
        if (speed <= 60)
            flag = 0;
        else if (speed <= 80)
            flag = 1;
        else 
            flag = 2;
    if (isBirthday)
        if (speed <= 65)
            flag = 0;
        else if (speed <= 85)
            flag = 1;
        else 
            flag = 2;
        return flag;
}

解决方法

在您的第一个代码中,您测试isBirthday!isBirthday。 Java不够聪明,无法看到此列表的详尽无遗。而且您通常不会这样写:相反,您会写else

public int caughtSpeeding(int speed,boolean isBirthday) {
    if (!isBirthday) {
        if (speed <= 60)
            return 0;
        else if (speed <= 80)
            return 1;
        else 
            return 2;
    } else {
        if (speed <= 65)
            return 0;
        else if (speed <= 85)
            return 1;
        else 
            return 2;
    }
}

还有,我有什么方法可以改善第二段代码?

是:使用第一个代码。第二个代码使用完全冗余的变量。使用第一个代码。

实际上,由于第二个代码使用了一个变量,因此Java不会在遗忘情况时警告您-它会默默返回0,因为flag的初始化方式是这样的。那将是一个错误。在可能的情况下,编写不会导致错误但触发编译错误的代码-这就是代码1所做的,因此是错误消息(在这种情况下为假肯定,但通常是正确的)。

,

好吧,对我们来说显而易见的是,如果要执行“如果是生日”和“如果不是生日”,那么Java编译器不会那样看。

对此,如果第一个'if'未被执行,第二个'if'也未被执行,那么您将在方法的末尾不执行'return'。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。