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]