Scala控制结构和函数练习

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

猜你喜欢

转载自blog.csdn.net/smsmtiger/article/details/84777182