《快學Scala》第二章習題解答
阿新 • • 發佈:2018-12-25
RT。
package com.scalalearn.scala.main /** * 快學scala 02習題 */ object LearnScala02 { //1.如果一個數字為正數,則它的signum為1;如果是負數,則signum為-1;如果是0,則signum是0 //編寫一個函式來計算這個值 def execise1(num:Int):Int = { if (num > 0) 1 else if(num == 0) 0 else -1 } //2.一個空的塊表示式的值是什麼?它的型別是什麼 //值是(),型別是Unit //3.指出Scala何種情況下賦值語句x=y=1是合法的 //在x的型別為Unit的情況下是合法的 //4.針對下列java迴圈編寫一個scala版 //for(int i=10;i>=0;i--)System.out.println(i) def execise4():Unit={ var i = 10 while(i >= 0){ println(i) i = i -1 } } //5.編寫一個過程countdown(n:Int),列印從n到0的數字 def countdown(n:Int):Unit={ var i = n while(i >= 0){ println(i) i = i -1 } } //6.編寫一個for迴圈,計算字串中所有字母的unicode程式碼的乘積 //舉例來說,"Hello"中所有字母的字元成為9415087488L def execise6(input:String):BigInt = { var sum:BigInt = 1 val length = input.length for(i <- 0 to length-1){ sum = sum * input(i).toLong } sum } //7.同樣是解決6的問題,但不能夠用迴圈(提示,StringOps) def execise7(input:String):BigInt = { var sum:BigInt = 0 sum = input.map(_.toLong).product sum } //第8題感覺和6,7重複了,故不做 //9.把前一個練習的函式改為遞迴函式 def execise9(input:String,curIndex:Int):BigInt = { if (curIndex == input.length - 1){ input(curIndex).toLong } else{ execise9(input,curIndex+1)*input(curIndex).toLong } } //第10題,題目太長,主要是根據定義編寫函式 def execise10(x:Double,n:Int): BigDecimal ={ if(n == 0){ 1 }else if (n < 0){ 1/execise10(x,-1*n) }else if (n % 2 == 1){ x*execise10(x,n-1) }else{ execise10(x,n/2)*execise10(x,n/2) } } def main(args:Array[String]):Unit = { println("================execise1==============") println(LearnScala02.execise1(333)) println(LearnScala02.execise1(-23)) println(LearnScala02.execise1(0)) println("================execise4==============") LearnScala02.execise4() println("================execise5==============") LearnScala02.countdown(3) println("================execise6==============") println(LearnScala02.execise6("Hello")) println("================execise7==============") println(LearnScala02.execise7("Hello")) println("================execise9==============") println(LearnScala02.execise9("Hello",0)) println("================execise10==============") println(LearnScala02.execise10(2,-4)) } }