scala小练习二
2017-06-07 16:11
483 查看
1.编写一个Person类,其主构造器接受一个字符串,该字符串包含名字,空格和姓,如new
Person(“Fred Smith”)。提供只读属性 firstName 和 lastName。主构造器参数应该是var, val
还是普通参数。
2.+3. 编写一个Time类,加入只读属性hours和minutes,和一个检查某一时刻是否早于另一时刻
的方法before(other:Time):Boolean。Time对象应该以new Time(hrs,min)方式构建。其中hrs以
军用时间格式呈现(介于0和23之间)
重新实现前一个类中的Time类,将内部呈现改成午夜起的分钟数(介于0到24*60-1之间)。不
要改变公有接口。也就是说,客户端代码不应因你的修改而受影响。
4.定义抽象类Animal,在抽象类中定义抽象方法animal 和 sound,并定义templateMethod
方法,在这个方法中直接调用animal 和sound 方法是否合理?定义两种实现类,实现Animal,
修改Animal 和它的子类,使其还能表示动物都吃什么。所编写的代码需要满足如下测试
5.自己设计一套特质,要求体现叠加在一起的特质,设计具体的抽象方法抽象字段
6.创建trait BatteryPower 来报告剩余电量。如果电量多余40%,那么报告“green”;如果在
20%~39% 之间 那么报告yellow;如果少于20%,那么报告”red”。实例化该代码满足下列测
试: class Battery extends EnergySource with BatteryPower
7.通过把 scala.math.Ordered[Point] 混入 java.awt.Point 的方式,定义 OrderedPoint 类,
按照词典的编辑方式排序,也就是说,如果x < x
8.查看BitSet 类,将它所有的超类和特质绘制成一张图,忽略类型参数([…] 中的内容)。然后给
出该特质的线性化规格说明。
BitSetLike, SortedSet, SortedSetLike, Sorted, Set, SetLike, Subtractable, GenSet, GenericSetTemplate, GenSetLike, Iterable, IterableLike, Equals, GenIterable, GenIterableLike, Traversable, GenTraversable, GenericTraversableTemplate, TraversableLike, GenTraversableLike, Parallelizable, ParSet, TraversableOnce, GenTraversableOnce, FilterMonadic, HasNewBuilder, (Int) ⇒ Boolean, AnyRef, Any
Person(“Fred Smith”)。提供只读属性 firstName 和 lastName。主构造器参数应该是var, val
还是普通参数。
class Person(val name:String) { val firstNmae:String=name.split(" ")(0) val lastNmae:String=name.split(" ")(1) }
2.+3. 编写一个Time类,加入只读属性hours和minutes,和一个检查某一时刻是否早于另一时刻
的方法before(other:Time):Boolean。Time对象应该以new Time(hrs,min)方式构建。其中hrs以
军用时间格式呈现(介于0和23之间)
重新实现前一个类中的Time类,将内部呈现改成午夜起的分钟数(介于0到24*60-1之间)。不
要改变公有接口。也就是说,客户端代码不应因你的修改而受影响。
class Time(val hours:Int,val minute:Int) { //参数类型是必须指定的,val或var不必须显示指定 def before(other: Time): Boolean ={ hours<other.hours||hours==other.hours&&minute<other.minute } //实现1 def time(): String ={ hours+":"+minute } //实现2 // def time(): String ={ // (hours*60+minute).toString //} }
4.定义抽象类Animal,在抽象类中定义抽象方法animal 和 sound,并定义templateMethod
方法,在这个方法中直接调用animal 和sound 方法是否合理?定义两种实现类,实现Animal,
修改Animal 和它的子类,使其还能表示动物都吃什么。所编写的代码需要满足如下测试
abstract class Animal { def animal:String def sound:String def templateMethod=s"$animal $sound" } abstract class Animaleat extends Animal{ def eat:String override def templateMethod=s"$animal food is $eat" //抽象方法override可以省略,非抽象方法override必须写 } class Duck extends Animaleat{ override def animal: String = "Duck" def eat:String="plant" override def sound: String = "Quack" } class Cow extends Animaleat{ override def animal: String = "Cow" def eat:String="grass" override def sound: String = "Moo"
5.自己设计一套特质,要求体现叠加在一起的特质,设计具体的抽象方法抽象字段
class SmartPhone extends Phone with Camera with Video{//叠加特质 val player="CD" override def watch(): Unit = { println(s"watch video $player") } def func(): Unit ={ photograph() watch() call() } } trait Camera{ val photoNum:Int=100//具体字段 def photograph(): Unit ={//具体方法 println(s"take photo $photoNum") } } trait Video{ val player:String//抽象字段 def watch() } class Phone{ def call(): Unit ={ println("make a call")//抽象方法 } }
6.创建trait BatteryPower 来报告剩余电量。如果电量多余40%,那么报告“green”;如果在
20%~39% 之间 那么报告yellow;如果少于20%,那么报告”red”。实例化该代码满足下列测
试: class Battery extends EnergySource with BatteryPower
class Battery extends EnergySource with BatteryPower{ def monitor: String = super.monitor(energy) } class EnergySource{ var energy:Int=0 } trait BatteryPower{ def monitor(percentage:Int): String ={ if(percentage<20) "red" else if(percentage>=40) "green" else "yellow" } }
7.通过把 scala.math.Ordered[Point] 混入 java.awt.Point 的方式,定义 OrderedPoint 类,
按照词典的编辑方式排序,也就是说,如果x < x
或者 x = x或者 y < y
则(x, y) < (x’y)
import java.awt.Point import scala.util.Random class OrderedPoint(x:Int,y:Int) extends Point(x:Int,y:Int) with Ordered[Point]{ override def compare(that: Point): Int = { if(this.y>that.y) 1 else if (this.y<that.y) -1 else 0 if(this.x>that.x) 1 else if (this.x<that.x) -1 else 0 } } object TestOrderPoint{ def main(args: Array[String]): Unit = { //用随机数测试 val array:Array[OrderedPoint]=new Array[OrderedPoint](5) for (i <- 0 to array.length-1){ array(i)=new OrderedPoint((new Random()).nextInt(10),(new Random).nextInt(10)) } array.foreach(println) println(" ") val res=array.sortWith(_ > _) // sortWith(lt: (A, A) ⇒ Boolean): List[A] //使用自定义的比较函数进行排序,比较函数在boolean部分 // val res2=res.sortWith(_ .compare(_)>0)//降序 // val res3=res.sortWith((s,t)=>s.compare(t)>0) res.foreach(println) } }
8.查看BitSet 类,将它所有的超类和特质绘制成一张图,忽略类型参数([…] 中的内容)。然后给
出该特质的线性化规格说明。
BitSetLike, SortedSet, SortedSetLike, Sorted, Set, SetLike, Subtractable, GenSet, GenericSetTemplate, GenSetLike, Iterable, IterableLike, Equals, GenIterable, GenIterableLike, Traversable, GenTraversable, GenericTraversableTemplate, TraversableLike, GenTraversableLike, Parallelizable, ParSet, TraversableOnce, GenTraversableOnce, FilterMonadic, HasNewBuilder, (Int) ⇒ Boolean, AnyRef, Any