scala基础篇·操作符
代码:
package operator
/**
* 分数
* @param num 分子
* @param den 分母
*/
class MyFraction(private val num: Int, private val den: Int) {
/**
* 分数乘法
*
* @param other
* @return
*/
def *(other: MyFraction): MyFraction = MyFraction(num * other.num, den * other.den)
/**
* 分数加法
*
* @param other
* @return
*/
def +(other: MyFraction): MyFraction = MyFraction(num * other.den + den * other.num, den * other.den)
/**
* 分数除法
*
* @param other
* @return
*/
def /(other: MyFraction): MyFraction = this * MyFraction(other.den, other.num)
/**
* 分数减法
*
* @param other
* @return
*/
def -(other: MyFraction): MyFraction = this + MyFraction(-1, 1) * other
/**
*
* @return
*/
def -(): MyFraction = MyFraction(-1 * num, den)
/**
* 值
*
* @return
*/
def value: Double = if (den == 0) {
throw new IllegalArgumentException("除数为0")
} else {
(num * 1.0) / den
}
/**
* 倒数
*
* @return
*/
def reciprocal(): MyFraction = MyFraction(den, num)
}
object MyFraction {
/**
* apply方法
*
* @param num
* @param den
* @return
*/
def apply(num: Int, den: Int): MyFraction = new MyFraction(num, den)
def main(args: Array[String]): Unit = {
val a = MyFraction(1, 4)
val b = MyFraction(1, 2)
val va = a.value
val vb = b.value
println(s"加法:$va + $vb = ${(a + b).value}")
println(s"减法:$va - $vb = ${(a - b).value}")
println(s"乘法:$va * $vb = ${(a * b).value}")
println(s"除法:$va / $vb = ${(a / b).value}")
println(s"倒数:1/$va = ${a.reciprocal().value}, 1/$vb = ${b.reciprocal().value}")
println(s"相反数:-$va = ${-a.value}, -$vb = ${-b.value}")
}
}
输出:
加法:0.25 + 0.5 = 0.75
减法:0.25 - 0.5 = -0.25
乘法:0.25 * 0.5 = 0.125
除法:0.25 / 0.5 = 0.5
倒数:1/0.25 = 4.0, 1/0.5 = 2.0
相反数:-0.25 = -0.25, -0.5 = -0.5