您的位置:首页 > 其它

Scala学习(六)练习

2015-06-29 10:43 323 查看
Scala中的对象&练习

1. 编写一个Conversions对象,加入inchesToCentimeters,gallonsToLiters和milesToKilometers方法

程序代码:

object Conversions {

private val i2c=30.48

private val g2l=3.785411784

private val m2k=1.609344

def inchesToCentimeters(inch:Double):Double={

inch*i2c

}

def gallonsToLiters(gallon:Double):Double={

gallon*g2l

}

def milesTokilometers(mile:Double):Double={

mile*m2k

}

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

val inch=15

val gallon=15

val mile=15

println(inch+"英尺= "+inchesToCentimeters(inch))

println(gallon+"加仑= "+gallonsToLiters(gallon))

println(mile+"公里= "+milesTokilometers(mile))

}

}

运行结果:


15英尺= 457.2

15加仑= 56.78117676

15公里= 24.14016


2. 前一个练习不是很面向对象。提供一个通用的超类UnitConversion并定义扩展该超类的InchesToCentimeters,GallonsToLiters和MilesToKilometers对象

程序代码:

abstract class UnitConversion {

def Converse(from:Double):Double

}

object inchesToCentimeters extends UnitConversion{

private val i2c=30.48

override def Converse(inche:Double):Double={

inche*i2c

}

}

object gallonsToLiters extends UnitConversion{

private val g2l=3.785311784

override def Converse(gallon:Double):Double={

g2l*gallon

}

}

object milesToKilometers extends UnitConversion{

private val m2k=1.609344

override def Converse(mile:Double):Double={

m2k*mile

}

}

object Test{

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

val inche=10; val gallon=10; val mile=10

println(inche+"英尺= "+inchesToCentimeters.Converse(inche)+"厘米")

println(gallon+"加仑= "+gallonsToLiters.Converse(gallon)+"升")

println(mile+"公里= "+milesToKilometers.Converse(mile)+"公里")

}

}

运行结果:


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. 实现一个函数,检查某张牌的花色是否为红色

程序代码:

object Card extends Enumeration with App{

val SPADES=Value("?")

val HEARTS=Value("?")

val DIAMONDS=Value("?")

val CLUBS=Value("?")

type Card=Value

def color(c:Card)={

if(c==Card.HEARTS||c==Card.DIAMONDS)

println("Red")

else

println("Black")

}

color(SPADES)

color(DIAMONDS)

}

运行结果:


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")

}



如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【Sunddenly】。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: