Skip to content

Instantly share code, notes, and snippets.

@namiken
Last active August 29, 2015 14:01
Show Gist options
  • Save namiken/363bc136d7a2f1809d6b to your computer and use it in GitHub Desktop.
Save namiken/363bc136d7a2f1809d6b to your computer and use it in GitHub Desktop.
分数の計算を行うクラス
/**
* 分数の値、および計算メソッドを保持するクラス。計算メソッドを利用すると自信の分数の値が書き換わる。(引数の値は書き換わりません)
*
*/
public class Fraction {
/**
* 分子
*/
private int numerator;
/**
* 分母
*/
private int denominator;
/**分数を作る
* @param numerator 分子
* @param denominator 分母
*/
public Fraction(int numerator, int denominator) {
//分母がゼロならエラー
if (denominator == 0) {
throw new RuntimeException("denominator is not permission 'zero'");
}
this.numerator = numerator;
this.denominator = denominator;
reduction();
}
/**
* 約分を行う
*/
private void reduction() {
int gcdi = gcdi(numerator, denominator);
numerator = numerator / gcdi;
denominator = denominator / gcdi;
}
/**
* 引数の分数を加える
* @param fraction
* @return
*/
public void addition(Fraction fraction) {
numerator = fraction.denominator * numerator + fraction.numerator * denominator;
denominator *= fraction.denominator;
reduction();
}
/**
* 引数の分数を引く
* @param fraction 引かれる数
* @return
*/
public void subtraction(Fraction fraction) {
numerator = fraction.denominator * numerator - fraction.numerator * denominator;
denominator *= fraction.denominator;
reduction();
}
/**
* 引数の分数を掛ける
* @param fraction
* @return
*/
public void multiplication(Fraction fraction) {
denominator *= fraction.denominator;
numerator *= fraction.numerator;
reduction();
}
/**
* 引数の分数を割る
* @param fraction 割られる数
* @return
*/
public void division(Fraction fraction) {
denominator *= fraction.numerator;
numerator *= fraction.denominator;
reduction();
}
/**
* 分子を返す
* @return
*/
public int getNumerator() {
return numerator;
}
/**
* 分母を返す
* @return
*/
public int getDenominator() {
return denominator;
}
@Override
public String toString() {
//分母が1のときは分子だけ返す
if (denominator == 1) {
return Integer.toString(numerator);
}
return numerator + "/" + denominator;
}
/**
* 最大公約数を求める
* @param a
* @param b
* @return
*/
private static int gcdi(int a, int b) {
while (b > 0) {
int c = a;
a = b;
b = c % b;
}
return a;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment