两个结果的返回语句都缺少返回语句错误

时间:2018-11-11 20:37:09

标签: java

   public double getWeight(boolean isMetric) {
    // your code here
    if(isMetric = true) {
    return kg;
    } else if(isMetric = false) 
        return lb;      
}

我知道每个可能的结果都需要一个return语句,但是因为这是一个布尔参数,这是否意味着我只需要两个return语句?我尝试在最后一行添加“返回null”,但这只会导致“类型非法开始”错误。

   public User(String firstName, String lastName, double weight, double height) {  
    first = firstName;
    last = lastName;
    kg = weight;
    cm = height;    
}

    public User(String firstName, String lastName, double weight, double height, boolean isMetric) {
    // your code here
    first = firstName;
    last = lastName;
    lb = weight;
    in = height;
    isMetric = false;
}

这些是与所讨论方法相关的构造函数。

3 个答案:

答案 0 :(得分:1)

这里:

if(isMetric = true) {

那是分配,而不是条件(=与==)。

因此,您的“检查”可以归结为:

if (true) { ... return

和结束}之后的所有内容均为无效代码。

换句话说:编译器认识到您的代码将允许返回kg,因此else-if永远不会执行,因此编译器告诉您似乎有问题。

答案 1 :(得分:1)

首先在条件内部使用==而不是=

if(isMetric == true) {
}

现在,由于if / else if条件的计算结果为布尔值,因此您可以将代码重新执行以下操作:

if(isMetric) {
 ...
}

此外,确实所有方法分支都应该返回一个值(并且Java没有“优化”来检查else if是否包含布尔表达式的条件。

相反,您可以使用以下等效的构造:

public double getWeight(boolean isMetric) {
   // your code here
    if(isMetric) {
      return kg;
    } else {
      return lb;  
    }    
 }

答案 2 :(得分:0)

我将简化您的以下操作:

public double getWeight(boolean isMetric) {
    if (isMetric) {
        return kg;
    }
    return lb;      
}

getWeight方法存在几个主要问题。 if(isMetric = true)将isMetric分配为true,而不是将其与true进行比较(=用于分配,==用于检查相等性)。它抱怨说缺少返回,因为您的上一条语句处于不必要的条件(else if(isMetric = false))中,在该条件中存在隐式else而没有返回。