gpt4 book ai didi

java - 为什么这段代码会出现缺少返回语句的错误?

转载 作者:搜寻专家 更新时间:2023-10-31 08:10:57 25 4
gpt4 key购买 nike

如果我将此代码的 else if 部分更改为 else 语句,它可以毫无问题地运行,所以我知道如何让它运行。我有点困惑的是,为什么在当前形式下出现缺少返回语句错误。我的返回取决于 boolean 变量的负值。我把 true 和 false 状态都覆盖了,这还不够好吗?

还是我总是必须在 else 中有一个 return 语句,或者在我的函数底部添加一个无意义的 return true 以便编译器接受我的代码涵盖所有情况?

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
public boolean posNeg(int a, int b, boolean negative) {
if (!negative) {
return (a < 0 && b > 0) || (a > 0 && b < 0);
}
else if (negative) {
return (a < 0 && b < 0);
}
}

public static void main (String[] args) throws java.lang.Exception
{
}
}

最佳答案

当编译器看到没有 else 或尾随 return 语句的 else if 时,无法确定所有控制路径都会导致有效的 return 语句。

编译器有时可以很聪明,但在这种情况下它不会很聪明(也不应该很聪明)。

此行为对您的示例很有帮助:在这种情况下您绝对没有理由使用 else if。简单的 else 更易于阅读、更简洁且不易出错。

else 在这种情况下非常有表现力。它的意思是“与 if 子句相反”,如果将来代码发生变化,情况仍然如此。

如果编译器允许,您当前的代码将更有可能包含和/或引入错误。

下面是我将如何重写方法体:

if (negative) {
return (a < 0 && b < 0);
}
else {
return (a < 0 && b > 0) || (a > 0 && b < 0);
}

一般来说,除非有令人信服的理由(即可读性),否则您应该更喜欢if (negative) 而不是if (!negative)

另外,很多人(包括我自己)都试图在 if/else 语句中将最简单的子句放在首位。使您的代码易于阅读是一件好事。

查看 StephenC 的回答以获得技术解释和更多关于为什么编译器以这种方式运行的背景。

关于java - 为什么这段代码会出现缺少返回语句的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22738736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com