scala基础编程案例--定义一个类Rational支持有理数的运算


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)定义一个求分子分母最大公约数的方法,用于有理数的简化。

	//求最大公约数
    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十分相似,但代码风格更加简洁高效,大家如果有余力的话,可以尝试实现该有理数类的减法、乘法、除法等运算!

猜你喜欢

转载自blog.csdn.net/weixin_49588575/article/details/130614386