scala-第六章-Rational

涉及到的知識點:
檢查先決條件。

函數重載。

操作符重載。

控制檯輸入。

私有函數。

隱式轉換。


<pre name="code" class="java">import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.math.BigDecimal;
class Rational(n:Int, d:Int){
  require(d != 0);//檢查先決條件
  
  private val g = gcd(n.abs, d.abs);
  val num: Int = n / g;
  val den: Int = d / g;
  
  override def toString = n +"/"+ d;//重載tosting
  def this(n: Int) = this(n, 1);
  
  def +(that: Rational): Rational = //定義操作符號
    new Rational(
    	num * that.den + that.num * den,
    	den * that.den
    )
  def *(that: Rational): Rational =
    new Rational(num * that.num, den * that.den)
  def *(i: Int): Rational = //重載*
    new Rational(i*num, den)
  
  def lessThan(that: Rational) = 
    this.num * that.den < that.num * this.den
  def max(that: Rational) =
    if(this.lessThan(that)) that else this
  private def gcd(n: Int, d:Int): Int =//私有函數
    if(d==0) n else gcd(d, n%d)
}
object Rational {
  def main(args: Array[String]){
    var bf = new BufferedReader(new InputStreamReader(System.in));
    var line = bf.readLine();
    var eles = line.split(" ")
    val R1 = new Rational(Integer.parseInt(eles(0)), Integer.parseInt(eles(1)));
    line = bf.readLine();
    eles = line.split(" ");
    val R2 = new Rational(Integer.parseInt(eles(0)), Integer.parseInt(eles(1)));
    val R3 = R1 + R2;
    val R4 = new Rational(2);
    implicit def intToRational(x: Int) = new Rational(x)//隱式轉換
    //隱式轉換要放在作用域,而不是放在類內!
    val R5 = 2 * R3;
    println(R5);
  }
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章