1. 程式人生 > >快學Scala 第五張答案

快學Scala 第五張答案

1.改進5.1節的Counter類,讓它不要在Int.MaxValue時變成負數

class Counter {
  private var value = 0
  def increment() {if(value < Int.MaxValue) value+1 else value}
  def current() = value
}

2.編寫一個BankAccount類,加入deposit和withdraw方法,和一個只讀的balance屬性。

class BankAccount(val balance:Int = 0){
  def deposit(){print("deposit"
)} def withdraw(){print("withdraw")} }

3.編寫一個Time類,加入只讀屬性hours和minutes,和一個檢查某一時刻是否早於另一時刻的方法before(other:Time):Boolean。Time物件應該以new Time(hrs,min)

class Time(val hours:Int,val minutes:Int){
  def before(other:Time):Boolean={
    hours < other.hours || (hours == other.hours && minutes
< other.minutes )
override def toString():String={ hours + ":" + minutes } } }

4.重複實現前一個練習中的Time類,將內部呈現改成自午夜起的分鐘數(介於0到24*60-1之間)。不要改變公有介面。也就是說,客戶端程式碼不應因你的修改而受到影響。

class Time(val hours:Int,val minutes:Int){
  def before(other:Time):Boolean={
    hours < other.hours || (hours
== other.hours && minutes < other.minutes)
} override def toString():String={ hours*60 + ":" + minutes } }

5.建立一個Student類,加入可讀寫的JavaBeans屬性name(型別為String)和id(型別為Long),有哪些方法被生成?(用javap檢視。)你可以在Scala中呼叫JavaBeans版的getter和setter方法嗎?應該這樣做嗎?

import scala.beans.BeanProperty

class Student{
  @BeanProperty var name = _
  @BeanProperty var id = _

}

不知道為什麼每次用javap的時候一直提示類找不到類。

6.在5.2節的Person類中提供一個住構造器,將年齡轉換為0。

class Person(var age:Int){
  age = if(age < 0) 0 else age
}

7.編寫一個Person類,其主構造器接受一個字串,該字串包含名字、空格和姓,如new Person(“Fred Smith”)。提供製度屬性firstName和lastName。主構造器引數應該是var、val還是普通引數呢?為什麼?

應該是val,因為如果是var則會有get和set的預設方法,可是其屬性是不能改變的,所以只能為val的屬性。

8.建立一個Car類,以只讀屬性對應制造商、型號名稱、型號年份以及一個可讀寫的屬性用於車牌。提供四組構造器。每一個構造器都要求製造商和型號名稱為必填。型號年份以及車輛為可選,如果未填,則型號年份設定為-1,車輛設定為空字串。你會選擇哪一個作為你的主構造器?為什麼?

class Car(val Product:String,val Name:String,val Year:Long = -1,var Number:String = ""){
  if(Product == null || Name == null) return 1
}

10.重寫該類,使用顯式的欄位定義,和一個預設主構造器。你更傾向於使用哪一種形式?為什麼?

class Employee{
  val name:String = "John Q. Public"
  var salary:Double = 0.0
}

不知道這麼寫對不對,總感覺有點怪怪的
如果是按照這種形式來寫的話,確實是第二種的形式更加的方便,清晰。