返回方法重载

时间:2016-07-09 16:31:22

标签: java methods return overloading

我是Java的新手,我自己也在学习。我尝试重载方法时遇到了麻烦。这是代码

 public static void main(String[] args) {
        calculateScore();
        calculateScore(500);
        calculateScore("Duy", 600);
        calcFeetAndInchesToCentimetres(100, 3.5);
        calcFeetAndInchesToCentimetres(100*12 + 3.5);
    }

 public static double calcFeetAndInchesToCentimetres(double feet, double inches) {
        if (feet >= 0 && inches >= 0 && inches <= 12) {
            double footToInches = feet * 12;
            double centimetres = (inches + footToInches) * 2.54;
            System.out.println("The value in centimetres is " + centimetres + " cm.");
            return centimetres;
        } else {
            return -1;
        }
    }

    public static double calcFeetAndInchesToCentimetres(double inches) {
        if (inches >= 0){
            double inchesToFeet = inches / 12;
            double inchesRemain = inches - (inchesToFeet * 12);
            calcFeetAndInchesToCentimetres(inchesToFeet, inchesRemain);
            return 0;
        } else {
            return -1;
        }

我的问题是,当我从第二种方法中取return 0时,调试器会说&#34;缺少return语句&#34;。然后我尝试放return calcFeetAndInchesToCentimetres(inches);,它可以工作,但程序运行了大约数千次。

然后我放return 0,一切正常。但我不明白为什么我不能放return calcFeetAndInchesToCentimetres(inches);,为什么我需要一个return语句,当上面的方法(带有2个参数)已经得到它时。如果我想在执行第二种方法时使用厘米转换的值(使用&#34; inches&#34;仅参数),我该怎么做?

另一件事我已经意识到在这个区块代码中

double inchesToFeet = inches / 12;
        double inchesRemain = inches - (inchesToFeet * 12);
        calcFeetAndInchesToCentimetres(inchesToFeet, inchesRemain);

inchesRemain将为0?但该方法效果很好。当我更改inchesToFeet = inches % 12时,它只是没有显示任何内容。为什么呢?

3 个答案:

答案 0 :(得分:5)

应该是:

public static double calcFeetAndInchesToCentimetres(double inches) {
    if (inches >= 0){
        double inchesToFeet = inches / 12;
        double inchesRemain = inches - (inchesToFeet * 12);
        return calcFeetAndInchesToCentimetres(inchesToFeet, inchesRemain);
    } else {
        return -1;
    }
}

你说你已经尝试了return calcFeetAndInchesToCentimetres(inches);但是这只是递归地调用你的方法而且它会永远地恢复,因为没有停止条件。

答案 1 :(得分:3)

使用方法重载,您有两种不同的方法。

  1. calcFeetAndInchesToCentimetres只需一个参数
  2. calcFeetAndInchesToCentimetres带有两个参数
  3. 现在当你打电话给calcFeetAndInchesToCentimetres(inches);时,你正在调用一个只有一个参数的人。如果你从内部调用它,它将继续无限次地调用它。这是你看到的错误。

    如果用return calcFeetAndInchesToCentimetres(inchesToFeet, inchesRemain);替换它将调用另一个方法 - 那个带有两个参数的方法。这就是你真正想要做的事情。

    修正版:

    public static double calcFeetAndInchesToCentimetres(double inches) {
        if (inches >= 0){
            double inchesToFeet = inches / 12;
            double inchesRemain = inches - (inchesToFeet * 12);
            return calcFeetAndInchesToCentimetres(inchesToFeet, inchesRemain);
        } else {
            return -1;
        }
    }
    

答案 2 :(得分:0)

public static void main(String[] args) {
    calculateScore();
    calculateScore(500);
    calculateScore("Duy", 600);
    calcFeetAndInchesToCentimetres(100, 3.5);
    calcFeetAndInchesToCentimetres(100*12 + 3.5);
}

public static double calcFeetAndInchesToCentimetres(double feet, double inches) {
    if (feet >= 0 && inches >= 0 && inches <= 12) {
        double footToInches = feet * 12;
        double centimetres = (inches + footToInches) * 2.54;
        System.out.println("The value in centimetres is " + centimetres + " cm.");
        return centimetres;
    } else {
        return -1;
    }
}
public static double calcFeetAndInchesToCentimetres(double inches) {
    if (inches >= 0){
        double inchesToFeet = inches / 12;
        double inchesRemain = inches - (inchesToFeet * 12);
        calcFeetAndInchesToCentimetres(inchesToFeet, inchesRemain);
        return 0; //Here
    } else {
        return -1;
    }

如果删除return 0,则显示缺少return语句,因为您处于if-else循环中。 让我们说你的输入英寸小于0然后它将去其他部分并返回-1 ..但是如果输入的英寸大于0那么它将转到if条件并且它将到达if的结尾声明然后没有什么可以返回所以对于if-else条件,if和else都应该返回一些东西。

解决这个问题的另一种方法是在if-else条件下创建一个局部变量,并在else部分完成后返回..这样天气它会进入if代码或者部分代码两次都会出现要返回的局部变量的某个值..

现在问题的第二部分: 你的代码看起来像

line 1   public static double calcFeetAndInchesToCentimetres(double inches) {

第2行if (inches >= 0){ 第3行double inchesToFeet = inches / 12; 第4行double inchesRemain = inches - (inchesToFeet * 12); 第5行calcFeetAndInchesToCentimetres(inchesToFeet, inchesRemain); 第6行return calcFeetAndInchesToCentimetres(inches); } else { return -1; {{ 1}}

所以在这种情况下,你一次又一次地调用同一个方法。 你从第1行开始直到第6行,然后你调用相同的方法,然后再次开始执行,第1行将执行到第6行,然后第1行一遍又一遍,直到所有内存都丢失并且堆栈溢出出现..

最佳实践代码可能如下所示:

}