Javaで分数を扱う

概要

分数の四則演算を行う。

class MyFraction {
	private int denominator;// 分母
	private int numerator;// 分子

	void setFraction(int denominator, int numerator) {// 既存オブジェクトに引数で指定された分子と分母を代入
		this.denominator = denominator;
		this.numerator = numerator;
	}

	int greatestCommonMeasure(int x, int y) {// 最小公約数を求める
		int z;
		while ((z = x % y) != 0) {
			x = y;
			y = z;
		}
		return y;
	}

	void reductFraction() {// 約分する
		int gcm_num;
		gcm_num = greatestCommonMeasure(this.denominator, this.numerator);
		setFraction(this.denominator / gcm_num, this.numerator / gcm_num);
	}

	public String toString() {
		return "[" + numerator + "]/" + "[" + denominator + "]";
	}

	MyFraction() {// 引数なしのコンスタラクタ
		this.denominator = 0;
		this.numerator = 0;
	}

	MyFraction(int my_denominator, int my_numerator) {// 引数でフィールドを初期化する(ついでに約分)
		this.denominator = my_denominator;
		this.numerator = my_numerator;
		this.reductFraction();
	}

	/* 和 */
	void add(MyFraction mf1, MyFraction mf2) {
		this.numerator = mf1.numerator + mf2.numerator;
		this.denominator = mf1.denominator;
		reductFraction();
	}

	/* 差 */
	void sub(MyFraction mf1, MyFraction mf2) {
		this.numerator = mf1.numerator - mf2.numerator;
		this.denominator = mf1.denominator;
		reductFraction();
	}

	/* 積 */
	void mult(MyFraction mf1, MyFraction mf2) {
		this.numerator = mf1.numerator * mf2.numerator;
		this.denominator = mf1.denominator * mf2.denominator;
		reductFraction();
	}

	/* 商 */
	void div(MyFraction mf1, MyFraction mf2) {
		this.numerator = mf1.numerator * mf2.denominator;
		this.denominator = mf1.denominator * mf2.numerator;
		reductFraction();
	}

}

public class FractionTest_1 {
	public static void main(String[] args) {
		System.out.println("[4]/[8]をセットします");
		MyFraction mf0 = new MyFraction(8, 4);
		System.out.println("mf0=" + mf0);
		System.out.println("約分されていることを確認");
		System.out.println("-------------------");

		MyFraction mf1 = new MyFraction(7, 4);
		MyFraction mf2 = new MyFraction(7, 3);
		System.out.println("mf1=" + mf1);
		System.out.println("mf2=" + mf2);

		System.out.println("加算します");
		MyFraction addResult = new MyFraction();
		addResult.add(mf1, mf2);
		System.out.println(addResult);

		System.out.println("減算します");
		MyFraction subResult = new MyFraction();
		subResult.sub(mf1, mf2);
		System.out.println(subResult);

		System.out.println("乗算します");
		MyFraction multResult = new MyFraction();
		multResult.mult(mf1, mf2);
		System.out.println(multResult);

		System.out.println("除算します");
		MyFraction divResult = new MyFraction();
		divResult.div(mf1, mf2);
		System.out.println(divResult);
	}
}

実行結果

[4]/[8]をセットします
mf0=[1]/[2]
約分されていることを確認

                                    • -

mf1=[4]/[7]
mf2=[3]/[7]
加算します
[1]/[1]
減算します
[1]/[7]
乗算します
[12]/[49]
除算します
[4]/[3]