scala小练习二

来源:互联网 发布:网络女主播都是穷人 编辑:程序博客网 时间:2024/04/29 23:07

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.Pointimport scala.util.Randomclass 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