在Java程序中重写方法toString的麻烦

时间:2012-10-31 01:05:51

标签: java

我正在编写一个程序,其中我定义了类Function,并且有方法用它们执行算术运算。在输出中,在我的FractionDemo类中,我遇到了尝试编写输出,获取@ 12f9de等内容的问题。所以我知道我需要覆盖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]或其他任何东西。我马上就说我不太了解overSiding toString的东西,我对Java很新。

请告诉我是否应该添加任何内容。

2 个答案:

答案 0 :(得分:3)

您的toString方法需要在Fraction课程中,而不在FractionDemo

答案 1 :(得分:1)

toString必须在Fraction类中定义,不在<{1}}类中

更新:既然您正在使用它,请创建课程FractionDemo,制作字段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; } equals以使您的类具有真正的价值语义。