You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中实现分数类的乘法与加法运算?

解决Kotlin分数类的乘法与加法实现问题

首先修正你的Fraction类——构造函数里的denumerator没有添加val/var,它只是构造参数而非类属性,类内部无法访问。先把它改为类的私有属性:

class Fraction(private val numerator: Int, private val denumerator: Int) {
    // 初始化时校验分母不能为0
    init {
        require(denumerator != 0) { "分母不能为0" }
    }
}

接下来实现分数的乘法和加法,推荐用Kotlin的运算符重载,这样可以直接用*和+操作符,更符合直觉:

1. 实现乘法

分数乘法规则:分子相乘作为新分子,分母相乘作为新分母,最后约分。我们需要一个辅助函数计算最大公约数(GCD)来约分。

class Fraction(private val numerator: Int, private val denumerator: Int) {
    init {
        require(denumerator != 0) { "分母不能为0" }
    }

    // 重载乘法运算符
    operator fun times(other: Fraction): Fraction {
        val newNumerator = this.numerator * other.numerator
        val newDenominator = this.denumerator * other.denumerator
        return reduce(newNumerator, newDenominator)
    }

    // 约分辅助函数:返回最简分数
    private fun reduce(num: Int, den: Int): Fraction {
        val gcd = gcd(num, den)
        // 确保分母为正,统一符号
        val sign = if (den < 0) -1 else 1
        return Fraction(num / gcd * sign, den / gcd * sign)
    }

    // 计算最大公约数
    private fun gcd(a: Int, b: Int): Int {
        return if (b == 0) a else gcd(b, a % b)
    }

    // 重写toString方便查看结果
    override fun toString(): String {
        return "$numerator/$denumerator"
    }
}

2. 实现加法

分数加法规则:通分后分子相加(num1*den2 + num2*den1),分母为den1*den2,最后约分。

在上面的类中添加加法运算符重载:

// 重载加法运算符
operator fun plus(other: Fraction): Fraction {
    val newNumerator = this.numerator * other.denumerator + other.numerator * this.denumerator
    val newDenominator = this.denumerator * other.denumerator
    return reduce(newNumerator, newDenominator)
}

测试用法

fun main() {
    val f1 = Fraction(1, 6)
    val f2 = Fraction(3, 6)

    val product = f1 * f2
    println("乘法结果:$product") // 输出 1/12(3/6约分后是1/2,1/6*1/2=1/12)

    val sum = f1 + f2
    println("加法结果:$sum") // 输出 2/3(1/6+3/6=4/6,约分后是2/3)
}

补充说明

  • 加入了分母非0的校验,避免运行时错误
  • 约分函数统一了分母的符号,确保结果格式一致
  • 重写toString方法方便直接打印分数内容

内容的提问来源于stack exchange,提问作者PuzzleHead

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:15:36