2012-10-31 33 views
0

我正在編寫一個程序,其中我定義了類Function,並且有方法可以對它們執行算術運算。在輸出中,在我的FractionDemo類中,遇到了試圖編寫輸出的問題,得到@ 12f9de等等東西。所以我知道我需要重寫toString函數,但我遇到了無法找到符號錯誤。在Java程序中重寫方法toString的問題

這裏是我的代碼:

功能:

public class Fraction 
{ 
    int numerator; 
    int denominator; 

    public Fraction(int numerator, int denominator) 
    { 
     this.numerator = numerator; 
     this.denominator = denominator; 
    } 

    public void setNumerator(int numerator) 
    { 
     this.numerator = numerator; 
     return; 
    } 

    public void setDenominator(int denominator) 
    { 
     this.denominator = denominator; 
     return; 
    } 

    public int getNumerator() 
    { 
     return numerator; 
    } 

    public int getDenominator() 
    { 
     return denominator; 
    } 

    public static Fraction add(Fraction fraction1, Fraction fraction2) 
    { 
     Fraction fraction3 = new Fraction(((fraction1.getNumerator() * fraction2.getDenominator()) + (fraction1.getDenominator() * fraction2.getNumerator())), (fraction1.getDenominator() * fraction2.getDenominator())); 
     return fraction3; 
    } 

    public static Fraction subtract(Fraction fraction1, Fraction fraction2) 
    { 
     Fraction fraction3 = new Fraction(((fraction1.getNumerator() * fraction2.getDenominator()) - (fraction1.getDenominator() + fraction2.getNumerator())), (fraction1.getDenominator() * fraction2.getDenominator())); 
     return fraction3; 
    } 

    public static Fraction multiply(Fraction fraction1, Fraction fraction2) 
    { 
     Fraction fraction3 = new Fraction((fraction1.getNumerator() * fraction2.getNumerator()), (fraction1.getDenominator() * fraction2.getDenominator())); 
     return fraction3; 
    } 

    public static Fraction divide(Fraction fraction1, Fraction fraction2) 
    { 
     if (fraction2.getNumerator() != 0) 
     { 
      Fraction fraction3 = new Fraction((fraction1.getNumerator() * fraction2.getDenominator()), (fraction1.getDenominator() * fraction2.getNumerator())); 
      return fraction3; 
     } 
     else throw new IllegalArgumentException("Division by Zero"); 
    } 
} 

FractionDemo:

public class FractionDemo 
{  
    public static void main(String[] args) 
    { 
     Fraction fraction1 = new Fraction(4,7); 
     Fraction fraction2 = new Fraction(5,6); 

     Fraction fractionSum = Fraction.add(fraction1, fraction2); 
     System.out.println(fractionSum); 

     Fraction fractionDif = Fraction.subtract(fraction1, fraction2); 
     System.out.println(fractionDif); 

     Fraction fractionProd = Fraction.multiply(fraction1, fraction2); 
     System.out.println(fractionProd); 

     Fraction fractionDividend = Fraction.divide(fraction1, fraction2); 
     System.out.println(fractionDividend); 
    } 

    public String toString() 
    { 
     return ("The result is: " + numerator + "/" + denominator); 
    } 
} 

無論如何,有沒有什麼方法可以讓我得到的輸出被正確格式化?它說它無法在FractionDemo底部的toString部分找到我的變量。無論我使用變量名稱,函數調用如[fractionSum.getNumerator],還是其他任何東西。我馬上說,我並不真正瞭解重要的toString事情,我對Java很新。

讓我知道是否應該添加任何東西。

+0

添加實際的錯誤消息 –

回答

1

toString必須在Fraction類中定義,不在中的FractionDemo類中。

UPDATE:既然你在它,使課堂final,使字段private final,除去制定者,讓你toString返回原料分數表示,沒有這句話"The result is: "(應該是這樣的的FractionDemo工作):

public final class Fraction 
{ 

    private final int numerator; 
    private final int denominator; 

    @Override 
    public String toString() 
    { 
     return (numerator + "/" + denominator); 
    } 

    ... 
} 

的理由是,Fraction應該是一個永恆不變的值類。

而且,我相信你不應該接受零的分母:

public Fraction(int numerator, int denominator) 
{ 
    if (denominator == 0) throw new IllegalArgumentException("Denominator can't be zero!"); 
    this.numerator = numerator; 
    this.denominator = denominator; 
} 

而且,你應該實現equalshashCode使類具有真正價值的語義。

+0

似乎這樣做。這可能是我之前做過的,當我在實驗室練習中使用它時。我當時並沒有真正理解它,所以我實在不記得我在哪裏定義它。我想那是它。現在我所要做的就是等待我的工作受到批評。 :P – user1786288

+0

@ user1786288:增加了一些更多的想法。 –

+2

同意以上所有內容 - 此外,您可能需要查看此主題以瞭解性能和靈活性:http://stackoverflow.com/questions/925423/is-it-better-practice-to-use-string -format-過字符串拼接式的Java – Romski

3

您的toString方法需要在您的Fraction類中,而不是在FractionDemo中。

+0

+1 - 由於它在錯誤的類中,因此它不能引用正確類的實例變量。因此編譯錯誤。 –