if/else语句缺少返回语句

kiz8lqtg  于 2021-07-06  发布在  Java
关注(0)|答案(8)|浏览(448)
public int checkGuess(int g, int randomnumber){

    number=g;
    this.randomnumber= randomnumber;

    if (number == randomnumber)
        return 0;

    else if (number < randomnumber)
        return -1;

    else if (number > randomnumber)
        return 1;

}

为什么这会给我一个丢失的返回语句错误?每个if/else都有一个返回值,最后一个括号出现错误

bttbmeg0

bttbmeg01#

你需要一个else来让它如你所期望的那样工作,它不会评估你的条件来知道它总是会回来的

vjhs03f7

vjhs03f72#

不需要一个 else 过了一段时间 return 声明:

if (number == randomnumber)
  return 0;

if (number < randomnumber)
  return -1;

// Must be true: if (number > randomnumber)
return 1;

请注意,这解决问题的原因是编译器不检查逻辑上必须返回的解决方案。e、 g.当a必须><或=到b时,它不检查该关系。它正在寻找明确覆盖每一条路径的可能性。

tv6aics1

tv6aics13#

基本上,编译器没有足够的智能来实现这一点 number == randomnumber || number < randomnumber || number > randomnumber 是重言式。既然你没有 else ,它认为有可能通过条件,然后到达函数的结尾而不返回。最简单的解决办法是改变你的最后一个 elseif 只是一个 else . 从之前的情况来看 number > randomnumber 如果你说的是真的(如果你有妄想症并且想确定,你可以添加Assert。)

fhity93d

fhity93d4#

你可以试着换衣服 else ifelse .

if (number == randomnumber)
    return 0;

else if (number < randomnumber)
    return -1;

else
    return 1;
j7dteeu8

j7dteeu85#

编译器不需要知道 if / else 树覆盖了所有可能的案例。如果你能写出一些编译器足够聪明的代码来判断代码是否正确,而其他编译器却不正确,那就太糟糕了。java要求您编写清晰、干净的代码,而不是精确地说明编译器必须有多聪明。
根据java规范中的定义,函数的右大括号是可以到达的。你能证明它是不可达的,通过其他一些定义“可达”并不重要。java规范中的“可达”概念是一个正式的概念,在编译器可以实际实现的规范中有详细的解释。这不是常识上的“可达性”概念,人们无论如何也不可能用计算机来教它。

s8vozzvw

s8vozzvw6#

应在 else 或者在整个世界之外 if/else-if . 有可能一个回报是永远不会与所有回报取决于一个条件

if (condition 1)
    return a;
else if (condition 2)
    return b;
else if (condition 3)
    return c;

如果条件1、2或3都不满足,则不会返回。报税表应随时提供。所以解决方法是:

if (condition 1)
    return a;
else if (condition 2)
    return b;
else if (condition 3)
    return c;
else
    return d;

if (condition 1)
    return a;
else if (condition 2)
    return b;
else if (condition 3)
    return c

return d;
eqzww0vc

eqzww0vc7#

java要求保证非void方法返回一些东西(即使它是null)。如果有if语句,根据定义,只有有时您的return语句才会运行。

if(number == randomnumber) {
    return 0;
} else if(number < randomnumber) {
    return -1;
} else if(number > randomnumber) {
    return 1;
} else {
    return -2;
}

else语句不是必需的,但它确实使imo更容易理解。

nzrxty8p

nzrxty8p8#

return 语句位于 if 声明。虽然它在逻辑上可能不可能如所写的那样,但是编译器需要返回 if 评估正确。
我建议:

public int checkGuess(int number, int randomnumber){
    int retVal = 0;
    this.randomnumber= randomnumber;

    if (number == randomnumber) {
        retVal = 0;
    } else if (number < randomnumber) {
        retVal = -1;
    } else if (number > randomnumber) {
        retVal = 1;
    }
    return retVal;
}

在我看来,这个解决方案解决了编译器的问题,并略微提高了可读性。
或者,有这样的解决方案:

public int checkGuess(int number, int randomnumber){
    this.randomnumber= randomnumber;

    if (number == randomnumber) {
        return 0;
    } else if (number < randomnumber) {
        return -1;
    } else if (number > randomnumber) {
        return 1;
    } else {
        //throw an exception
    }
}

抛出异常将允许您在不返回任何内容的情况下退出该方法。。。因为可以说,如果你进入决赛 else ,显然出了问题。

相关问题