1. 程式人生 > >快學scala 第一章練習題課後答案

快學scala 第一章練習題課後答案

第一題:在Scala REPL 中鍵入3.,然後按Tab鍵。有哪些方法可以唄應用?
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相當於變數,可以重新賦值

scala> res0 = 1
<console>:8: error: reassignment to val
       res0 = 1
            ^
所以res是val的變數。

第四題: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在順序選取或者刪除字元的速度上沒有上述的集中方法速度快。