创建一个FRACTION类,用整型表示是有成员变量 F1和F2,提供构造方法讲F1存入分子,F2存入分母,提供两个分数相加,结果分别存入F1和F2,提供两个分数相减,结果分别存入F1和F2,提供两个分数相乘,结果分别存入F1和F2,提供两个分数相除,结果分别存入F1和F2,,以A/B的形式打印FRACTION数,以浮点数的形式打印,编写java主程序运行分数运算
调试欢乐多
这规则小学就会吧。求出来之后用辗转相除法求最大公约数就可以化简了。
Fraction a = new Fraction(7, 32);
Fraction b = new Fraction(13, 32);
System.out.println(a + " + " + b + " = " + a.add(b));
}
}// 分数
class Fraction {
private int numerator; // 分子 private int denominator; // 分母 Fraction(int numerator, int denominator) {
if (denominator == 0) {
throw new IllegalArgumentException("分母不能为 0");
} this.numerator = numerator;
this.denominator = denominator;
shrink();
} Fraction() {
this(0, 1);
} public int getNumerator() {
return numerator;
} public void setNumerator(int numerator) {
this.numerator = numerator;
} public int getDenominator() {
return denominator;
} public void setDenominator(int denominator) {
this.denominator = denominator;
} // 分子分母同除以最大公约数
private Fraction shrink() {
int maxCommonDivisor = getMaxCommonDivisor(this.denominator, this.numerator);
this.numerator /= maxCommonDivisor;
this.denominator /= maxCommonDivisor;
return this;
} // 辗转相除法求最大公约数
private int getMaxCommonDivisor(int a, int b) {
int mod = a % b; if (mod == 0) {
return b;
} else {
return getMaxCommonDivisor(b, mod);
}
} // 分数加法
public Fraction add(Fraction that) {
return new Fraction(this.numerator * that.denominator + this.denominator * that.numerator,
this.denominator * that.denominator);
} // 减法、乘法 和除法在这里补充 @Override
public String toString() {
return String.format("{%d/%d}", this.numerator, this.denominator);
}
}
public class TestApp {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Fraction f1 = new Fraction(1,2);
Fraction f2 = new Fraction(2,3);
f1.add(f2);
System.out.println(f1);
f1.minus(f2);
System.out.println(f1);
f1.multi(f2);
System.out.println(f1);
f1.div(f2);
System.out.println(f1);
}}class Fraction {
/**分子*/
private int f1;
/**分每*/
private int f2;
Fraction(int var1, int var2) {
f1 = var1;
f2 = var2;
}
/**
* 加
* @param value
* @return
*/
public Fraction add(Fraction value) {
int lcm = LCM(f2, value.f2);
f1 = f1 * lcm / f2 + value.f1 * lcm /value.f2;
f2 = lcm;
simpler();
return this;
}
/**
* 减
* @param value
* @return
*/
public Fraction minus(Fraction value) {
Fraction temp = new Fraction(value.f1, value.f2 * -1);
return add(temp);
}
/**
* 乘
* @param value
* @return
*/
public Fraction multi(Fraction value) {
f1 *= value.f1;
f2 *= value.f2;
simpler();
return this;
}
/**
* 除
* @param value
* @return void
*/
public Fraction div(Fraction value) {
f1 *= value.f2;
f2 *= value.f1;
simpler();
return this;
}
/**
* 约分
* return void
*/
private void simpler() {
int gcd = GCD(f1, f2);
f1 /= gcd;
f2 /= gcd;
}
/**
* 用辗转相除法求最大公约数
* @param s
* @param b
* @return int
*/
private int GCD(int s, int b) {
// s-small,b-big
if (s > b) {
int temp = s;
s = b;
b = temp;
}
while (b != 0) {
int temp = s % b;
s = b;
b = temp;
}
return s;
} /**
* 最小公倍数
* @param a
* @param b
* @return int
*/
private int LCM(int a, int b) {
return a * b / GCD(a, b);
}
public String toString() {
return String.valueOf(f1) + "/" + String.valueOf(f2);
}}