1. 程式人生 > >《快學Scala》第二章習題解答

《快學Scala》第二章習題解答

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))
  }
}