2016-03-20 32 views
-4

私の宿題は次のとおりです。有理数についてこのJavaの宿題を始めるには?

分数で算術演算を実行するためのRationalを作成します。あなたのクラスをテストするプログラムを書く。クラスのプライベートなインスタンス変数(分子と分母)を表すには、整数変数を使用します。

は、宣言されたときにこのクラスのオブジェクトを初期化できるようにするコンストラクタを提供します。コンストラクタは、小数点を縮小した形で格納する必要があります。端数2/4は1/2に等しく、分子に1、分母に2としてオブジェクトに格納されます。初期化子がない場合は、引数のないコンストラクタにデフォルト値を指定します。

a)2つの合理的な数を加算する:加算の結果は縮小形式で保存する必要があります。これを静的メソッドとして実装します。

b)Subtracr 2つの合理的な数値:減算の結果は縮小された形式で保存する必要があります。これを静的メソッドとして実装します。

c)2つの合理的な数を掛け合わせます。乗算の結果は縮小された形式で保存する必要があります。これを静的メソッドとして実装します。

d)2つの合理的な数値を除算する:除算の結果は縮小形式で保存する必要があります。これを静的メソッドとして実装します。

e)a/bという形式のRational番号の文字列表現を返します。ここで、aは分子、bは分母です。

f)浮動小数点形式のRational数値の文字列表現を返します。 (小数点以下の精度の桁数を指定するには、クラスのユーザーを有効書式設定機能を提供することを検討してください。)

+7

卒業証書を取得できますか? –

+0

あなたはこれまでにどのようなコードを書いていますか?それだけで問題のあるコードに役立ちます。 – DSlomer64

+0

@ DSlomer64私はクラスとコンストラクタを作成するだけです –

答えて

1

これは

public class Rational { 

    private static int gcd(int u, int v) { 
     if (u == 0) { 
      return v; 
     } else if (v == 0) { 
      return u; 
     } else if (u == 1 || v == 1) { 
      return 1; 
     } 
     int temp; 
     while (v != 0) { 
      temp = u % v; 
      u = v; 
      v = temp; 
     } 
     return u; 
    } 

    private static Rational reduce(Rational num) { 
     int gcd = gcd(num.getNumerator(), num.getDenominator()); 
     return new Rational(num.getNumerator()/gcd, num.getDenominator()/gcd); 
    } 

    private static Rational neg(Rational num) { 
     return new Rational(-(num.getNumerator()), num.getDenominator()); 
    } 

    public static Rational add(Rational a, Rational b) { 
     return reduce(new Rational(a.getNumerator() * b.getDenominator() + a.getDenominator() * b.getNumerator(), a.getDenominator() * b.getDenominator())); 
    } 

    public static Rational subtract(Rational a, Rational b) { 
     return add(a, neg(b)); 
    } 

    public static Rational multiply(Rational a, Rational b) { 
     return reduce(new Rational(a.getNumerator() * b.getNumerator(), a.getDenominator() * b.getDenominator())); 
    } 

    public static Rational divide(Rational a, Rational b) { 
     return multiply(a, new Rational(b.getDenominator(), b.getNumerator())); 
    } 

    public static String getString(Rational num) { 
     return String.format("%d/%d", num.getNumerator(), num.getDenominator()); 
    } 

    public static String getFloatString(Rational num) { 
     return getFloatString(num, 6); 
    } 

    public static String getFloatString(Rational num, int fixedTo) { 
     return String.format("%." + fixedTo + "f", num.getNumerator()/((float) num.getDenominator())); 
    } 

    private final int numerator; 
    private final int denominator; 

    public Rational() { 
     this(0, 1); // Note that division by zero is not allowed 
    } 

    public Rational(int numerator, int denominator) { 
     if (denominator == 0) { 
      throw new ArithmeticException("Division by zero"); 
     } 
     this.numerator = numerator; 
     this.denominator = denominator; 
    } 

    public int getNumerator() { 
     return numerator; 
    } 

    public int getDenominator() { 
     return denominator; 
    } 

} 

はあなたにそれをカスタマイズし、あなたのクラスでありますニーズ。考えられる修正:より良い精度のためにfloatからdoubleに変更してください。

+0

'divide'と' multiply'はゼロで除算する必要はありません。なぜなら、そうするコンストラクタを呼び出すからです –

関連する問題