簡體   English   中英

打印方法的返回值時獲取 0.0

[英]Getting 0.0 when printing the return value of a method

class input{
    private double num1;
    private double num2;
    
    public void setNum1(double num1) {
        this.num1 = num1;
    }

    public double getNum1() {
        return this.num1;
    }
    
    public void setNum2(double num2) {
        this.num2 = num2;
    }

    public double getNum2() {
        return this.num2;
    }
}

class calculator extends input{
    double a = getNum1();
    double b = getNum2();
    
    double add() {
        return a+b;
    }
}

class advcalc extends calculator{
    double less() {
        return a-b;
    }
}

public class Inheritence {
    public static void main(String[] args) {
    advcalc cal = new advcalc();
    cal.setNum1(10);
    cal.setNum2(10);
    
    System.out.println(cal.add());
    }
}

我在這里練習繼承。 第一類獲取輸入,第二類用於加法,第三類用於減法。 我創建了一個第三類的對象。 通過setNum1() && setNum1()傳遞輸入后,當我嘗試打印 add 的返回值時,它會打印 0.0。 我無法弄清楚是什么問題。 請有人幫幫我。

在您的代碼中,在calculator中定義的變量ab將始終為0.0 ,因為它們是在您的對象初始化期間設置的,並且僅設置一次:

  1. 你調用new advcalc()
  2. 在初始化期間double a = getNum1(); double b = getNum2(); 被稱為
  3. 您調用setNum1並更改inputnum1的值,但 a 保持不變
  4. 您調用add並且ab都是0.0

如果您刪除變量ab並在add中調用getNum1getNum2 ,它應該可以工作。 您還可以在calculator中覆蓋setNum1setNum2並在那里設置ab

a = getNum()在賦值之前被執行。

double a = getNum1();
double b = getNum2();
double add() {
  return a+b;
}

而不是這個,您可以在add方法中分配值。這樣,它將在您創建實例后分配。

double a, b = 0;
double add() {
    this.a = getNum1();
    this.b = getNum2();
    return a + b;
}

有多種方法可以實現這一點。 您還可以在add方法中傳遞值或創建parameterized constructor

我在練習繼承。

那么您是否知道ab (在類calculator中)是成員變量1並且它們在父類(即類input )中隱藏了2 個成員變量num1num2 隱藏會導致問題(正如您所發現的)。 因此,您應該使num1num2 protected 3並刪除ab

考慮以下:
(請注意,我根據Java 命名約定更改了類名。)

public class Inheritance {

    public static void main(String[] args) {
        AdvCalc cal = new AdvCalc();
        cal.setNum1(10);
        cal.setNum2(10);
        System.out.println(cal.add());
    }
}

class Input {
    protected double num1;
    protected double num2;

    public void setNum1(double num1) {
        this.num1 = num1;
    }

    public double getNum1() {
        return this.num1;
    }

    public void setNum2(double num2) {
        this.num2 = num2;
    }

    public double getNum2() {
        return this.num2;
    }
}

class Calculator extends Input {
    public double add() {
        return num1 + num2;
    }
}

class AdvCalc extends Calculator {
    public double less() {
        return num1 - num2;
    }
}

1請參閱聲明成員變量(在 Oracle 的 Java 教程中)。
2參考Java中的變量陰影和隱藏
3請參閱控制對類成員的訪問

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM