繁体   English   中英

使用if-else并且满足所有可能的条件时,为什么在方法中需要附加的return语句

[英]Why do i need an additional return statement in a method when using if-else and all possible conditions are met

我的问题是关于方法中的return语句。 在下面的方法calculatePrice中,它接受一个整数作为参数,并且对每种可能的情况(0以下,范围内和范围顶部)进行if-else块测试,并为每个语句返回一个语句。 下面的代码编译出错,因为我没有在底部包括return语句,但是我很困惑为什么需要它,因为它在到达最后一个返回值之前会满足条件之一。 谢谢!

import java.text.DecimalFormat;
public class ElectricityCostSolution {
    public static void main(String[] args) {
        DecimalFormat price = new DecimalFormat("$##.00");
        int test1 = 984;
        int test2 = 2984;
        int test3 = 5984;
        System.out.println("The price for " + test1 + "kwh of electricity is " + price.format(calculatePrice(test1)));
        System.out.println("The price for " + test2 + "kwh of electricity is " + price.format(calculatePrice(test2)));
        System.out.println("The price for " + test3 + "kwh of electricity is " + price.format(calculatePrice(test3)));
    }
    public static double calculatePrice(int hours) {
        final double LEVEL_ONE_PRICE = .0577;
        final double LEVEL_TWO_PRICE = .0532;
        final double LEVEL_THREE_PRICE = .0511;
        if (hours <= 1000) {
            return hours * LEVEL_ONE_PRICE;
        } else if (hours > 1000 && hours <= 5000) {
            return (1000 * LEVEL_ONE_PRICE) + (hours - 1000) * LEVEL_TWO_PRICE;
        } else if (hours > 5000) {
            return (1000 * LEVEL_ONE_PRICE) + (4000 * LEVEL_TWO_PRICE) + (hours - 5000) * LEVEL_THREE_PRICE;
        }
    }
}

为什么您需要第三个? 永远是真的。

编译器实际上不会评估您的所有条件,以查看这两个决定是否真的可以发生。 通常,不可能自动做出这些确定。

如果将最后一个条件设为else而不是“ else if”,则不需要其他返回。

这是因为您添加了ifelse if语句,当不满足任何这些条件时,该方案没有return语句。

也许您应该添加一个else代码块或仅在代码末尾添加一个return语句,或者您可以将现有代码更改为

    if(hours <= 1000)
    {
      return hours * LEVEL_ONE_PRICE;
    }
    else if(hours>1000 && hours <= 5000)
    {
      return (1000 * LEVEL_ONE_PRICE) + (hours-1000) * LEVEL_TWO_PRICE;
    }
    else 
    {  
     return (1000 * LEVEL_ONE_PRICE) + (4000 * LEVEL_TWO_PRICE) + (hours - 5000) * LEVEL_THREE_PRICE;
    }

也许是因为Java不知道是否满足所有条件。 编译时,它会查找代码错误,但我认为它不能确保满足您的if-else语句。 以防万一,它会使您添加return false; return true; 最后确保没有问题。 我认为只是开发人员不想在Java中添加检查。 另一个例子是将变量设置为其他变量。 它不应该知道var1 = var2if (var1 = var2)之间的区别吗?

如果我错了纠正我。

-ben

这是因为编译器没有检查您的实际条件,所以它警告说,如果您的条件都不满足,那么您将没有返回值。 这就是为什么编程老师经常说一种好的做法是将“返回”值存储在变量中,然后在过程结束时实际返回它。 因此,并且它更易于调试。 对于您的个人问题,您可以省略if (hours > 5000)语句,然后将其保留到最后else 您将获得相同的算法(因为如果没有其他方法,则将满足> 5000),并且编译器将识别所有执行路径,因此不会发出警告。

暂无
暂无

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

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