1. 程式人生 > >Scala練習六

Scala練習六

Scala中的物件&練習

1. 編寫一個Conversions物件,加入inchesToCentimeters,gallonsToLiters和milesToKilometers方法

程式程式碼:

  1. object Conversions {
  2.   private val i2c=30.48
  3.   private val g2l=3.785411784
  4.   private val m2k=1.609344
  5.   def inchesToCentimeters(inch:Double):Double={
  6.     inch*i2c
  7.   }
  8.   def gallonsToLiters(gallon:Double):Double={
  9.     gallon*g2l
  10.   }
  11.   def milesTokilometers(mile:Double):Double={
  12.     mile*m2k
  13.   }
  14.   def main(args: Array[String]): Unit = {
  15.     val inch=15
  16.     val gallon=15
  17.     val mile=15
  18.     println(inch+"英尺"+inchesToCentimeters(inch))
  19.     println(gallon+"加侖"+gallonsToLiters(gallon))
  20.     println(mile+"公里"+milesTokilometers(mile))
  21.   }
  22. }

執行結果:

15英尺= 457.2

15加侖= 56.78117676

15公里= 24.14016

2. 前一個練習不是很面向物件。提供一個通用的超類UnitConversion並定義擴充套件該超類的InchesToCentimeters,GallonsToLiters和MilesToKilometers物件

程式程式碼:

  1. abstract class UnitConversion {
  2.   def Converse(from:Double):Double
  3. }
  4. object inchesToCentimeters extends UnitConversion{
  5.   private val i2c=30.48
  6.   override def Converse(inche:Double):Double={
  7.     inche*i2c
  8.   }
  9. }
  10. object gallonsToLiters extends UnitConversion{
  11.   private val g2l=3.785311784
  12.   override def Converse(gallon:Double):Double={
  13.     g2l*gallon
  14.   }
  15. }
  16. object milesToKilometers extends UnitConversion{
  17.   private val m2k=1.609344
  18.   override def Converse(mile:Double):Double={
  19.     m2k*mile
  20.   }
  21. }
  22. object Test{
  23.   def main(args: Array[String]): Unit = {
  24.     val inche=10; val gallon=10; val mile=10
  25.     println(inche+"英尺"+inchesToCentimeters.Converse(inche)+"釐米")
  26.     println(gallon+"加侖"+gallonsToLiters.Converse(gallon)+"")
  27.     println(mile+"公里"+milesToKilometers.Converse(mile)+"公里")
  28.   }
  29. }

執行結果:

10英尺= 304.8 釐米

10加侖= 37.85311784 

10公里= 16.09344 公里

3. 定義一個擴充套件自java.awt.Point的Origin物件。為什麼說這實際上不是個好主意 (仔細看Point類的方法)

描述:Point中的getLocation方法返回的是Point物件,如果想返回Origin物件,需要Origin類才行。Point有move方法,setLocation方法。這些作為Origin(原 點) 來說,都不是很合適

程式程式碼:

import java.awt.Point

object Origin extends Point with App{

override def getLocation:Point=super.getLocation()

Origin.move(2, 3)

println(Origin.toString())

}

4.  定義一個Point類和一個伴生物件,使得我們可以不用new而直接用Point(3,4)來構造Point例項

描述:apply方法使用

程式程式碼:

class Point(x:Int,y:Int) {

override def toString():String="x= "+x+" y= "+y

}

object Point extends App{

def apply(x:Int,y:Int)={

new Point(x,y)

}

val p=new Point(3,4)

println(p)

}

執行結果:

x= 3 y= 4

5. 編寫一個Scala應用程式,使用App特質,以反序列印命令列引數,用空格隔開。舉例來說,scala Reverse Hello World應該列印World Hello  

程式程式碼:

object Reverse extends App{

for(str <- args.reverse)

println(str+" ")

}

執行結果:

6. 編寫一個撲克牌4種花色的列舉,讓其toString方法分別返回,,, 

描述:這四個花色的符號win下選輸入法的特殊符號軟鍵盤。在lin下可以用vim。在vim中輸入:dig可以找到分別對應cS,cH,cD,cC。進入vim插入模式按<CTRL-K>,然後分別輸入即可

程式程式碼:

object PokerFace extends Enumeration {

type PokerFace=Value

val SPADES=Value("♠")

val HEARTS=Value("♥")

val DIAMONDS=Value("")

val CLUBS=Value("")

def main(args: Array[String]): Unit = {

for(poker <- PokerFace.values)

println(poker)

}

}

執行結果:

7. 實現一個函式,檢查某張牌的花色是否為紅色

程式程式碼:

  1. object Card extends Enumeration with App{
  2.   val SPADES=Value("?")
  3.   val HEARTS=Value("?")
  4.   val DIAMONDS=Value("?")
  5.   val CLUBS=Value("?")
  6.   type Card=Value
  7.   def color(c:Card)={
  8.     if(c==Card.HEARTS||c==Card.DIAMONDS)
  9.       println("Red")
  10.      else
  11.        println("Black")
  12.   }
  13.   color(SPADES)
  14.   color(DIAMONDS)
  15. }

執行結果:

Black

Red

8. 編寫一個列舉,描述RGB立方體的8個角。ID使用顏色值(例如:紅色是0xff0000)

描述:RGB如果分別用8位表示,紅是0xff0000,綠是0x00ff00,藍是0x0000ff。以此類推 ,8個頂點分別是(0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) (1,0,1) (1,1,0) (1,1,1)

程式程式碼:

object RGB extends Enumeration with App {  

val RED = Value(0xff0000,"Red")  

val BLACK = Value(0x000000,"Black")  

val GREEN = Value(0x00ff00,"Green")  

val CYAN = Value(0x00ffff,"Cyan")  

val YELLOW = Value(0xffff00,"Yellow")  

val WHITE = Value(0xffffff,"White")  

val BLUE = Value(0x0000ff,"Blue")  

val MAGENTA = Value(0xff00ff,"Magenta")  

}