1. 程式人生 > >快學Scala練習題答案-第2章

快學Scala練習題答案-第2章

scala執行在java虛擬機器上,它在擁抱函數語言程式設計的同時,又沒有廢棄面向物件,這是一種全新的程式設計正規化。本文的內容為基本的控制結構和函式一章的答案。

一個數字如果為正數,則它的signum為1,如果為負數,則signum為-1,如果為0,則signum為0.編寫一個函式來計算這個值。

這裡寫圖片描述

一個空的表示式{}的值是什麼?型別是什麼?

在scala中,{}塊包含一系列表示式,其結果也是一個表示式,塊中最後一個表示式的值就是塊的值。
這裡寫圖片描述
如圖所示,型別是Unit型別,它的值就是(), 等同於Java中的void。

指出Scala中何種情況下賦值語句x=y=1是合法的。

賦值語句是Unit型別的,所以應該把x賦值成Unit型別。

針對下列Java迴圈編寫一個Scala版:
for(int i=10; i>=0;i–) System.out.println(i);

這裡寫圖片描述

編寫一個過程countdown(n:Int),列印從n到0的數字

這裡寫圖片描述
或者寫成:

這裡寫圖片描述

編寫一個for迴圈,計算字串中所有字母的Unicode程式碼的乘積。舉例來說,”Hello”中所有字串的乘
積為9415087488L

這裡寫圖片描述

同樣是解決前一個練習的問題,但這次不使用迴圈。

這裡寫圖片描述

編寫一個函式product(s:String), 計算前面練習中提到的乘積。

這裡寫圖片描述

把前一個練習中的函式改成遞迴函式。

以object形式來執行

 object Test9{
   def main(args: Array[String]){
      val str = "hello"
      var result = 1
      result = product(str)
      println(result)
   }
   def product(s:String) : Int = {
     if(s.length == 1){
       s(0).toInt
     }else{
       s(0).toInt * product(s.substring(1
)); } } }

執行: scala TestQ9
結果: 714668928

編寫函式計算xn,其中n是整數,使用如下的遞迴定義:
- xn=y2,如果n是正偶數的話,這裡的y=xn/2
- xn=xxn1, 如果n是正奇數的話
- x0=1
- xn=1/xn,如果n是負數的話
不得使用return語句

 object Test10{
   def main(args: Array[String]){

      println(pow(5,2))      
      println(pow(5.toDouble,0))
      println(pow(5.toDouble,1))
      println(pow(5.toDouble,-1))

   }

   def pow(x:Double,n:Int) : Double = {
     if(n == 0){
       1
     }else if(n<0){
        1/pow(x,-n) 
     }else if (n % 2 ==0){
        pow(x,n/2)*pow(x,n/2)        
     }else{
        pow(x,n-1)*x    
     }
   }
 }

輸出:
25.0
1.0
5.0
0.2