快學scala 第一章練習題課後答案
阿新 • • 發佈:2018-12-25
第一題:在Scala REPL 中鍵入3.,然後按Tab鍵。有哪些方法可以唄應用?
第二題:在Scala REPL 中,計算3的平方根,然後再對該值求平方。現在,這個結果與3相差多少?(提示:res變數是你的朋友)
第三題:res變數是val還是var?
第七題:為了在使用probablePrime(100,Random)獲取隨機素數時不在probablePrime和Random之間使用任何限定符,你需要引入什麼?
有個奇怪的地方就是我在scaladoc上面,BigInt裡面並沒有probablePrime,但是按下tab卻有了,感覺好奇怪啊。其中文件是2.10.4的
第九題:在scala中如何獲取字串的首字元和尾字元?
獲得尾字元的方法:
10.take,drop,takeRight和dropRight這些字串函式是做什麼用的?和substring相比他們的有點和缺點有哪些?
scala> 3. != + <= >> getClass toDouble toString ## - <init> >>> hashCode toFloat unary_+ % / == ^ isInstanceOf toInt unary_- & < > asInstanceOf toByte toLong unary_~ * << >= equals toChar toShort |
第二題:在Scala REPL 中,計算3的平方根,然後再對該值求平方。現在,這個結果與3相差多少?(提示:res變數是你的朋友)
scala> math.sqrt(3)
res0: Double = 1.7320508075688772
scala> math.pow(res0,2)
res1: Double = 2.9999999999999996
第三題:res變數是val還是var?
val相當於常量,不可以更改其值,而var相當於變數,可以重新賦值
所以res是val的變數。scala> res0 = 1 <console>:8: error: reassignment to val res0 = 1 ^
第四題:Scala允許你用數字去乘字串——去REPL中試一下“crazy”*3這個操作做什麼?在Scaladoc中如何找到這個操作?
scala> "crazy"*3
res0: String = crazycrazycrazy
所以是三個連續的crazy。
操作:
def
*(n: Int): String
Return the current string concatenated n times.
第五題:10 max 2的含義是什麼?max方法定義在哪個類中?
scala> 10 max 2
res1: Int = 10
感覺像是輸出兩個當中的最大值。
這個方法是定義在 scala.math裡面的。
第六題:用BigInt計算2的1024次方。
scala> BigInt(2).pow(1024)
res2: scala.math.BigInt = 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216
第七題:為了在使用probablePrime(100,Random)獲取隨機素數時不在probablePrime和Random之間使用任何限定符,你需要引入什麼?
scala> import scala.util.Random
import scala.util.Random
scala> import scala.math.BigInt.probablePrime
import scala.math.BigInt.probablePrime
scala> probablePrime(100,Random)
res5: scala.math.BigInt = 854267948975213551692199231501
有個奇怪的地方就是我在scaladoc上面,BigInt裡面並沒有probablePrime,但是按下tab卻有了,感覺好奇怪啊。其中文件是2.10.4的
第八題:建立隨機檔案的方式之一是生成一個隨機的BigInt,然後將它轉換成三十六進位制,輸出類似“qsnvbe”這樣的字串,查閱Scaladoc,找到在Scala中實現改邏輯的辦法。
scala> BigInt(scala.util.Random.nextInt).toString(36)
res2: String = ohrd66
第九題:在scala中如何獲取字串的首字元和尾字元?
獲取首字元的方法:
scala> "hello"(0)
res7: Char = h
scala> "hello".take(1)
res8: String = h
獲得尾字元的方法:
scala> "hello".takeRight(1)
res12: String = o
scala> "hello".reverse(0)
res13: Char = o
10.take,drop,takeRight和dropRight這些字串函式是做什麼用的?和substring相比他們的有點和缺點有哪些?
take,takeRight是用來獲取字元的
drop和dropRight是用來刪除字元的
substring;能夠快速的獲取中間的字串,而上述的方法需要重複的組合使用才能獲取到中間的字串,但是substring在順序選取或者刪除字元的速度上沒有上述的集中方法速度快。