2012-10-30 104 views
1

所以我正在編寫一個介紹Java類的程序。我正在定義一個方法在類Fraction中添加兩個分數。分數有2個變量,分子和分母。每個變量都有一個setter和一個getter。無論如何,我的加法方法有問題,如下所示。我只是試圖以一種合理的方式來實現它,但我確定我做了一些調用方法/使用不起作用的對象。在同一個類的方法定義中調用一個類方法

public void add(Fraction fraction1, Fraction fraction2) 
{ 
    Fraction fraction3 = new Fraction(); 

    int a = fraction1.getNumerator; 
    int b = fraction1.getDenominator; 
    int c = fraction2.getNumerator; 
    int d = fraction2.getDenominator; 

    fraction3.setNumerator((a * d) + (b * c)); 
    fraction3.setDenominator(b * d); 
} 

我不知道問題出在方法定義,如果我可以使用對象鍵入方式,或者如果有別的東西是錯誤的。任何幫助,將不勝感激,如果我需要提供任何信息,我會盡快這樣做。

編輯:錯誤是一個編譯器錯誤,無法找到對象。函數調用後,我忘記了括號,解決了問題。對於忘記詳細描述我的錯誤帶來的不便,我們深表歉意。

謝謝!

+1

是什麼讓你覺得有什麼問題嗎?指出爲什麼你認爲有一個問題會幫助人們知道如何回答。 – DaoWen

+0

歡迎來到StackOverflow!在發佈問題時,當您告訴我們您收到的錯誤時,它可以幫助我們。是否有編譯器錯誤?代碼是否會拋出異常?你有意想不到的輸出?通過給我們更多的細節,我們可以更快地幫助您解決問題。 – Brian

回答

2

我想你的get調用是爲了方法。你有沒有得到一個編譯錯誤。

int a = fraction1.getNumerator(); 
int b = fraction1.getDenominator(); 
int c = fraction2.getNumerator(); 
int d = fraction2.getDenominator(); 
+2

就是這樣,謝謝!我忘了那種愚蠢的想法,但我想這就是學習語言的意義。 :P – user1786288

+1

@ user1786288在那裏,做到了。不用謝 :-) –

1

fraction3是一個局部變量,它的所有引用只要add方法完成丟失。您可以嘗試返回fraction3而不是void,以便堅持下去。

0

這只是我的看法,但如果您打算讓add有兩個參數,請使該方法爲靜態。如果你打算讓它有一個參數,它不會是靜態的,因爲第二個參數是隱含的this

這樣做的原因是,如果非靜態版本需要兩個參數,那麼你正在使用實例對實例b和實例Ç操作?恕我直言,這沒有多大意義。

1

你的方法是void,這意味着它不返回一個答案。在一個有效的解決一些略微的修改,你的代碼的結果:

public static Fraction add(Fraction fraction1, Fraction fraction2) 
{ 
    Fraction fraction3 = new Fraction(); 

    int a = fraction1.getNumerator(); 
    int b = fraction1.getDenominator(); 
    int c = fraction2.getNumerator(); 
    int d = fraction2.getDenominator(); 

    fraction3.setNumerator((a * d) + (b * c)); 
    fraction3.setDenominator(b * d); 

    return fraction3; 
} 

注意,我改變了方法static,因爲它不修改this,改變了返回類型從voidFraction,並增加了一個return聲明。不,這是一個無損補充,因爲它返回一個新的部分。如果你想使用這個風格,那麼你應該剛剛擺脫的二傳手方法,因爲它們不會被使用,並且作爲最後聲明領域,通過構造設置分子/分母來代替。

你的其他選擇是定義一個破壞性加法運算,這意味着接收機更新而不是像你上面做返回新的分數對象

public void add(Fraction that) 
{ 
    int a = this.getNumerator(); 
    int b = this.getDenominator(); 
    int c = that.getNumerator(); 
    int d = that.getDenominator(); 

    this.setNumerator((a * d) + (b * c)); 
    this.setDenominator(b * d); 
} 
0

圓括號在您的方法中缺失...

int a = fraction1.getNumerator(); 
int b = fraction1.getDenominator(); 
int c = fraction2.getNumerator(); 
int d = fraction2.getDenominator(); 
0

只需添加return type並從如下的方法返回fraction3

Fraction resultFraction = add(fraction1, fraction2); 

如果你想在fraction1添加fraction2:

public Fraction add(Fraction fraction1, Fraction fraction2) 
{ 
    Fraction fraction3 = new Fraction(); 

    int a = fraction1.getNumerator(); 
    int b = fraction1.getDenominator(); 
    int c = fraction2.getNumerator(); 
    int d = fraction2.getDenominator(); 

    fraction3.setNumerator((a * d) + (b * c)); 
    fraction3.setDenominator(b * d); 
    return fraction3 ; 
} 

現在你可以使用這個方法本身即

fraction1.add(fraction2); 

然後更新您的方法:

public void add(Fraction fraction2) 
{ 
    int a = this.numerator; 
    int b = this.denominator; 
    int c = fraction2.getNumerator(); 
    int d = fraction2.getDenominator(); 

    this.numerator = (a * d) + (b * c); 
    this.denominator = (b * d); 
} 
相關問題