1、案例要求
1)定义一个类Rational,分子与分母作为类参数;
2)重写toString方法;
3)前提条件检查(分母是否为0检查);
4)定义add方法实现两个有理数相加;
5)为 Rational 定义一个辅助构造函数,当分母为1时调用该辅助构造函数;
6)定义一个求分子分母最大公约数的方法,用于有理数的简化。
2、实现思路
1)定义一个类Rational,分子与分母作为类参数;
//有理数类
class Rational(n: Int, d: Int) {}
2)重写toString方法;
//重写打印函数
override def toString: String = {
if (denominator != 1) numerator + "/" + denominator
else numerator+""
}
3)前提条件检查(分母是否为0检查);
//分母要求不能为0
require(d != 0)
4)定义add方法实现两个有理数相加;
//实现分数加法函数
def add(that: Rational): Rational = {
new Rational(numerator * that.denominator + denominator * that.numerator,
denominator * that.denominator)
}
5)为 Rational 定义一个辅助构造函数,当分母为1时调用该辅助构造函数;
//辅助构造函数:若只传入一个参数,则构建n/1
def this(n:Int) = this(n, 1)
6)定义一个求分子分母最大公约数的方法,用于有理数的简化。文章来源:https://www.toymoban.com/news/detail-440226.html
//求最大公约数
private val g = gcd(n.abs, d.abs)
//求最大公约数函数
private def gcd(a: Int, b : Int) : Int =
if (b == 0) a else gcd(b, a % b)
//化简后的分子
def numerator: Int = n/g
//化简后的分母
def denominator: Int = d/g
3、完整代码
object demo1 {
//有理数类
class Rational(n: Int, d: Int) {
//分母要求不能为0
require(d != 0)
//辅助构造函数:若只传入一个参数,则构建n/1
def this(n:Int) = this(n, 1)
//化简后的分子
def numerator: Int = n/g
//化简后的分母
def denominator: Int = d/g
//重写打印函数
override def toString: String = {
if (denominator != 1) numerator + "/" + denominator
else numerator+""
}
//实现分数加法函数
def add(that: Rational): Rational = {
new Rational(numerator * that.denominator + denominator * that.numerator,
denominator * that.denominator)
}
//求最大公约数
private val g = gcd(n.abs, d.abs)
//求最大公约数函数
private def gcd(a: Int, b : Int) : Int =
if (b == 0) a else gcd(b, a % b)
}
//主函数
def main(args: Array[String]): Unit = {
//测试
var r = new Rational(1, 2)
var r1 = new Rational(3, 6)
println(r.add(r1))
var r2 = new Rational(3, 6)
println(r2)
}
}
4、总结
scala编程总体上还是与java十分相似,但代码风格更加简洁高效,大家如果有余力的话,可以尝试实现该有理数类的减法、乘法、除法等运算!文章来源地址https://www.toymoban.com/news/detail-440226.html
到了这里,关于scala基础编程案例--定义一个类Rational支持有理数的运算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!