import java.util.Scanner; public class Frac { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int a = scan.nextInt(); int b = scan.nextInt(); Frac f1 = new Frac(a, b); // ここで、コンストラクタを呼び、オブジェクトを生成する // (参考)privateなメンバー変数なので、コンパイルエラーになる。 // f1.a = 1; f1.yakubun(); System.out.println(f1.toString()); scan.close(); } private int a, b; Frac(int a, int b) { // コンストラクタ setBunsi(a); setBumbo(b); } public void setBunsi(int _a) { a = _a; this.checkSign(); } public void setBumbo(int _b) { if (_b == 0) { // Javaで、実行時に「例外を発生させる」コード例は、以下です。 throw new RuntimeException("Bumbo is zero"); } b = _b; this.checkSign(); } public void checkSign() { /* 分子も分母も、マイナスだったら、符号を反転させてください */ if (a < 0 && b < 0) { a = -a; b = -b; } } public String toString() { return a + "/" + b; } public void yakubun() { // ユークリッドの互除法を使って、最大公約数を求める int ta = Math.abs(a); int tb = Math.abs(b); while (tb != 0) { int r = ta % tb; ta = tb; tb = r; } // 最大公約数で割る a /= ta; b /= ta; } public Frac plus(Frac f) { int newa = this.a * f.b + f.a * this.b; int newb = this.b * f.b; return new Frac(newa, newb); } public Frac minus(Frac f) { /* ここを、返却値をふくめ、編集する */ return new Frac(1, 2); } public Frac 逆数(){ /* ここを、返却値をふくめ、編集する */ return new Frac(1, 2); } public Frac mul(Frac f) { /* ここを、返却値をふくめ、編集する */ return new Frac(1, 2); } public Frac div(Frac f) { /* ここを、返却値をふくめ、編集する 逆数() をうまく使うとシンプルに書けます。 */ return this.mul(f.逆数()); } // 分数の数値としては等しいとき true(約分してなくてもよい。例:1/2 equals 2/4 ) public boolean equals(Frac f) { return this.a * f.b == this.b * f.a; } // 分数の数値として等しく、かつ、分子分母の値もすべて等しいとき true public boolean same(Frac f) { return this.a == f.a && this.b == f.b; } }