/*需求:定义一个类,Fraction,该类存储一个分数,类中有两个成员变量,分子和分母
* 1)定义一个方法,接收一个Fraction r类,方法内把r的分数与本类的分数相加后生成一个新的Fraction类
* 2)定义一个方法,接收一个Fraction r类,方法内把r的分数与本类的分数相乘后生成一个新的Fraction类
* 3)测试类中创建两个Fraction对象,分别使用定义的两个方法生成新的分数,然后打印出来.*/
public class FractionTest {
public static void main(String[] args) {
// 创建两个对象
Fraction f1 = new Fraction(2, 3);
Fraction f2 = new Fraction(1, 4);
// 分数相乘
Fraction f3 = f1.multiply(f2);
// 分数相加
Fraction f4 = f1.plus(f2);
Fraction f5 = Fraction.huaJian(f3);
Fraction f6 = Fraction.huaJian(f4);
System.out.println(f5); // 相乘
System.out.println(f6); // 相加
}
}
class Fraction {
private int fz; // 分子
private int fm; // 分母
/**
* 无参构造
*/
public Fraction() {
super();
}
/*
* 带参构造
*/
public Fraction(int fz, int fm) {
super();
this.fz = fz;
this.fm = fm;
}
/*
* 分子get访问器
*/
public int getFz() {
return fz;
}
/*
* 分子set访问器
*/
public void setFz(int fz) {
this.fz = fz;
}
/*
* 分母get访问器
*/
public int getFm() {
return fm;
}
/*
* 分母set访问器
*/
public void setFm(int fm) {
this.fm = fm;
}
/**
* 计算分数相加
*
* @param r
* 传递 分数对象
* @return 返回一个分数
*/
public Fraction plus(Fraction r) {
// 计算出没简化前的分子分母
int newFz = this.fz * r.fm + r.fz * this.fm;
int newFm = this.fm * r.fm;
return new Fraction(newFz, newFm);
}
/**
* 计算分数相乘
*
* @param r
* 传递 分数对象
* @return 返回一个分数
*/
public Fraction multiply(Fraction r) {
int newFz = this.fz * r.fz;
int newFm = this.fm * r.fm;
return new Fraction(newFz, newFm);
}
/**
* 求最大公约数
*
* @param a
* 传递过来的分子
* @param b
* 传递过来的分母
* @return 递归
*/
public static int getGys(int a, int b) {
// 如果a%b==0,则b是最大公约数
int mod = a % b;
if (mod == 0) {
return b;
} else {
return getGys(b, mod);
}
}
/**
* 分子 分母分别除以最大公约数 得到化简后的 分子分母值
*
* @param r
* @return
*/
public static Fraction huaJian(Fraction r) {
int newFz = r.fz / getGys(r.fz, r.fm);
int newFm = r.fm / getGys(r.fz, r.fm);
return new Fraction(newFz, newFm);
}
// 将分子分母同时用分数符号做字符串拼接得到最后的结果
@Override
public String toString() {
return "Fraction:" + fz + "/" + fm;
}
}
|
|