控制結構與函式練習(一)

2gua發表於2013-02-03

今天繼續學習Scala,練手。

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

def sig_num(x: Double) = {
   if (x.signum == 1) x + "是正數"
   else if (x.signum == -1) x + "是負數"
   else "這個數是0"
}

println(sig_num(0))
println(sig_num(3))
println(sig_num(-2.8))

結果:

D:\dev\scala>scala sig_num.scala
這個數是0
3.0是正數
-2.8是負數

Scala沒有三元運算子“?:”,沒有switch語句,Scala的“if/else”語句很強大,最大特點是有值,就是“if/else”後面表示式的值。

2. 一個空的塊表示式{}的值是什麼?型別是什麼?
Ans:
值為(),型別為Unit。Unit相當於Java的void,()是個值,表示“無有用值”。
結果:

scala> val b = {}
b: Unit = ()

3. Scala中,何種情況下,賦值語句x = y = 1是合法的?
Ans:
在Scala中,賦值語句本身的值是Unit型別的,所以,在以下情況下x = y = 1才是合法的(x是相應的Unit型別),同時,x和y必須是var宣告。

scala> var x= ()
x: Unit = ()

scala> var y = 1
y: Int = 1

scala> x = y = 1
x: Unit = ()

4. 針對下列Java迴圈寫一個Scala版:

for (int i = 10; i >= 0; i--) System.out.println(i);

Ans:

scala> for (i <- 0 to 10) println(10 - i)
scala> for (i <- 0 to 10; from = 10 - i) println(from)

以上兩種方法都可以。
結果:

10
9
8
7
6
5
4
3
2
1
0

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

def countdown(n: Int) {
   for (i <- 0 to n; from = n - i) print(from + " ")
}

結果:

scala> countdown(6)
6 5 4 3 2 1 0

enter image description here

相關文章