第一次真正自己写scala. 纪念下
来源:互联网 发布:ubuntu anti-aliasing 编辑:程序博客网 时间:2024/05/17 00:00
scala写的分数类, 支持+-*/约分, 当左操作数约分设为true, 所有结果约分设为true, 可惜还是用了var
// 2012/5/15
// let it go
看了一个Java写的功能完全一样的分数类, 80+行, 不包括注释和空白行, scala39行搞定了
*******************************************************************************************************
扩充分数类, 实现前置一元操作符取负-, 取倒数~, 实现不等号比较, 实现跨类型计算(implicit conversion)
// 2012/5/16object Rational { implicit def toRational(a: Any) = { var d = a.toString.toDouble var numer = d var denom = 1 while (numer != numer.ceil) { numer *= 10 denom *= 10 } new Rational(numer.toInt, denom.toInt).-- }}class Rational(x: Int, y: Int){ require(y != 0) val numer = x val denom = y private val cd = gcd(numer abs, denom abs) private var autoreduce = false def getAutoreduce = autoreduce def setAutoreduce(bool: Boolean) = autoreduce = bool def -- : Rational = new Rational(numer / cd, denom / cd) private def fuc(x: Int, y: Int): Rational = { var ra = new Rational(x, y) if (autoreduce) { ra = ra.-- ra.setAutoreduce(true) } ra } def +(b: Rational) = fuc(numer * b.denom + denom * b.numer, denom * b.denom) def -(b: Rational) = fuc(numer * b.denom - denom * b.numer, denom * b.denom) def *(b: Rational) = fuc(numer * b.numer, denom * b.denom) def /(b: Rational) = { require(b != 0) fuc(numer * b.denom, denom * b.numer) } def unary_+ = this def unary_- = { val ra = new Rational(-numer, denom) if (autoreduce) ra.setAutoreduce(true) ra } def unary_~ = { require(numer != 0) val ra = new Rational(denom, numer) if (autoreduce) ra.setAutoreduce(true) ra } override def equals(b: Any): Boolean = b match{ case b: Rational => { val c = this.-- val d = b.-- c.toDouble * d.toDouble >= 0 && c.numer.abs == d.numer.abs && c.denom.abs == d.denom.abs } case _ => this.toDouble == b } def >=(b: Rational) = (this - b) isPositive def <=(b: Rational) = !(this >= b) || this == b def >(b: Rational) = !(this <= b) def <(b: Rational) = !(this >= b) private def isPositive = numer * denom >= 0 override def toString(): String = { if (this.toDouble < 0) { "-" + numer.abs + "/" + denom.abs }else "" + numer.abs + "/" + denom.abs } def toDouble : Double = numer.toDouble / denom.toDouble private def gcd(x: Int, y: Int): Int = if (y == 0) x else gcd(y, x % y)}
- 第一次真正自己写scala. 纪念下
- 第一次真正自己写ABAP
- 很长时间 第一次自己写代码ac 纪念一下
- 纪念第一次写博客
- 纪念第一次写博客
- 纪念第一次写博客
- 第一次爬虫,纪念下
- 纪念自己第一次进入CSDN
- 第一次写文章,纪念一下
- 第一次写文章,纪念一下
- 第一次写,留个纪念。。。。。。。。。。。。。。。
- 纪念一下第一次写博客
- 纪念下 第一次开高速
- 纪念自己开始写博
- 第一次自己写blog
- 第一次写python代码--纪念一下
- 纪念一下第一次用JAVA写大数!
- 第一次真正写linux的shell脚本
- 电信版iphone4s激活imessage的窍门
- 三国豪杰不怕失业
- 编译器如何将高级语言转成汇编语言的?
- 利用信息技术加强保险业服务质量
- apache 反向代理
- 第一次真正自己写scala. 纪念下
- 支付宝在线支付接口申请教程
- C++简单计时器类(修改自boost程序库)
- Delphi中Frame的使用方法(1)
- Flash Socket 的基本通讯协议流程例子
- 8种互联网在线支付接口
- Android-无线鼠键
- android xml界面布局常用属性概括
- poj 2243 双向bfs和A*