0

クラス 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 にかなり慣れていません。

追加すべきことがあれば教えてください。

4

2 に答える 2

3

メソッドは、 ではなく、クラスにtoStringある必要があります。FractionFractionDemo

于 2012-10-31T01:08:42.530 に答える
1

クラスではなく、クラスでtoString定義する必要があります。FractionFractionDemo

更新:そして、あなたはそれに取り組んでいるので、クラス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ありhashCodeます。

于 2012-10-31T01:08:14.343 に答える