您的位置:首页 > 其它

scala小练习二

2017-06-07 16:11 483 查看
1.编写一个Person类,其主构造器接受一个字符串,该字符串包含名字,空格和姓,如new

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息