繁体   English   中英

Java程序中重写方法toString的问题

[英]Trouble with overriding method toString in Java program

我正在编写一个程序,其中定义了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]之类的函数调用,还是其他任何方式。 我马上说,我不太了解最重要的toString东西,我对Java还是很陌生。

让我知道我是否应该添加任何内容。

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

toString必须在Fraction类中定义, 而不是FractionDemo类中定义。

更新 :并且由于您已经做好了准备,因此将类定为final ,将字段定为private final ,删除setter并让您的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以使您的类具有真实的值语义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM