Scala控制結構和函式練習
阿新 • • 發佈:2018-12-13
1、一個數字如果為正數,則它的signum為1;如果是負數,則signum為-1;如果為0,則signum為0.編寫一個函式來計算這個值
object BankDemo { def main(args: Array[String]): Unit = { println(signum(20)) println(signum(0)) println(signum(-2)) } //函式 def signum(num: Int): Int = { if (num > 0) { 1 } else if (num < 0) { -1 } else { 0 } } }
2、一個空的塊表示式{}的值是什麼?型別是什麼?Unit ()
var t = {}
println(t.isInstanceOf[Unit] + " " + t)
3、針對下列Java迴圈編寫一個Scala版本:
for(int i=10;i>=0;i–)System.out.println(i);
for (i <- 0 to 10 reverse) {
println(i)
}
4、編寫一個過程countdown(n:Int),列印從n到0的數字
def countDown(n: Int): Unit = { for (i <- 0 to n reverse) { println(i) } } def countDown2(n: Int): Unit = { //這裡我們使用時第二種方式,使用到高階函式的特性 (0 to n).reverse.foreach(println) }
5、編寫一個for迴圈,計算字串中所有字母的Unicode程式碼(toLong方法)的乘積。舉例來說,"Hello"中所有字串的乘積為9415087488L
var res: Long = 1
for (i <- "Hello") { //字串的本質就是字元陣列
res *= i.toLong
}
println("res=" + res)
6、同樣是解決前一個練習的問題,請用StringOps的foreach方式解決。
object Exercise06 { def main(args: Array[String]): Unit = { //計算字串中所有字母的Unicode程式碼(toLong方法)的乘積。舉例來說,"Hello"中所有字串的乘積為9415087488L,同樣是解決前一個練習的問題,請用StringOps的foreach方式解決 var res = 1L //res 預設是1 def f1(c: Char): Unit = { //累計 res *= c.toInt } //最傳統的寫法 "Hello".foreach(f1) println("res=" + res) var res2 = 1L //簡化的寫法 "Hello".foreach((c: Char) => { res2 *= c.toInt }) println("res2=" + res2) //再簡化一把 var res3 = 1L "Hello".foreach(res3 *= _.toInt) println("res3=" + res3) } }
7、編寫一個函式product(s:String),計算字串中所有字母的Unicode程式碼(toLong方法)的乘積
def product(s: String): Long = {
var r: Long = 1L
for (i <- s) {
r *= i.toLong
}
r
}
8、把7練習中的函式改成遞迴函式
object BankDemo {
def main(args: Array[String]): Unit = {
println("res=" + product2("Hello"))
println("Hello".take(1))
println("Hello".drop(1))
}
def product2(s: String): Long = {
//如果的字串的長度為1, 就直接返回 s.charAt(0).toLong
if (s.length == 1) return s.charAt(0).toLong
//s.drop(1) 將s的第一個字元去掉,返回後面所有的。
else s.charAt(0).toLong * product2(s.drop(1))
}
}
//程式碼解釋
object Exercise08 {
def main(args: Array[String]): Unit = {
val str = "Hello"
val substr1 = str.take(1)
println(substr1) // "H"
var subStr2 = str.drop(1)
println(subStr2) // "ello"
}
}