java如何实现分数
Java实现分数类的方法
在Java中实现分数(Fraction)类需要处理分数的基本运算(加减乘除)、约分、比较等操作。以下是实现分数类的核心步骤:
定义分数类的基本结构
public class Fraction {
private int numerator; // 分子
private int denominator; // 分母
public Fraction(int numerator, int denominator) {
if (denominator == 0) {
throw new IllegalArgumentException("分母不能为零");
}
this.numerator = numerator;
this.denominator = denominator;
simplify(); // 构造时自动约分
}
}
实现约分方法
约分需要使用最大公约数(GCD)算法:

private void simplify() {
int gcd = gcd(Math.abs(numerator), Math.abs(denominator));
numerator /= gcd;
denominator /= gcd;
// 确保分母始终为正
if (denominator < 0) {
numerator *= -1;
denominator *= -1;
}
}
// 计算最大公约数的欧几里得算法
private int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
实现基本运算方法
// 加法
public Fraction add(Fraction other) {
int newNumerator = numerator * other.denominator + other.numerator * denominator;
int newDenominator = denominator * other.denominator;
return new Fraction(newNumerator, newDenominator);
}
// 减法
public Fraction subtract(Fraction other) {
int newNumerator = numerator * other.denominator - other.numerator * denominator;
int newDenominator = denominator * other.denominator;
return new Fraction(newNumerator, newDenominator);
}
// 乘法
public Fraction multiply(Fraction other) {
return new Fraction(numerator * other.numerator, denominator * other.denominator);
}
// 除法
public Fraction divide(Fraction other) {
return new Fraction(numerator * other.denominator, denominator * other.numerator);
}
重写toString方法
@Override
public String toString() {
if (denominator == 1) {
return Integer.toString(numerator);
}
return numerator + "/" + denominator;
}
实现比较方法
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Fraction)) return false;
Fraction other = (Fraction) obj;
return numerator == other.numerator && denominator == other.denominator;
}
// 可以进一步实现Comparable接口
public int compareTo(Fraction other) {
int left = numerator * other.denominator;
int right = other.numerator * denominator;
return Integer.compare(left, right);
}
使用示例
public class Main {
public static void main(String[] args) {
Fraction f1 = new Fraction(3, 4);
Fraction f2 = new Fraction(2, 5);
System.out.println(f1.add(f2)); // 输出: 23/20
System.out.println(f1.subtract(f2)); // 输出: 7/20
System.out.println(f1.multiply(f2)); // 输出: 3/10
System.out.println(f1.divide(f2)); // 输出: 15/8
}
}
注意事项
- 分母为零时需要抛出异常
- 所有运算结果都应自动约分
- 保持分母始终为正数
- 考虑整数字面量(如分母为1时直接输出分子)
- 可以扩展实现负数分数的处理
这个实现提供了分数类的基本功能,可以根据需要进一步扩展其他方法或运算符重载。





