/** * Created with IntelliJ IDEA. * Author: zyc2913@163.com * Date: 2020/9/22 14:38 * Version: 1.0 * Description:习题训练 */ object Test2 { def main(args: Array[String]): Unit = {
/** * 1、一个数字如果为正数,则它的signum为1;如果是负数,则signum为-1;如果为0,则signum为0.编写一个函数来计算这个值 */ def signum(num:Int): Unit ={ if (num > 0) println(1) else if (num < 0) println(-1) else println(0) } //调用函数 signum(10) //1
/** * 2、一个空的块表达式{}的值是什么?类型是什么? * 值是(),类型是unit */ val s: Unit = {} println(s) //()
/** * 3、针对下列Java循环编写一个Scala版本: * for(int i=10;i>=0;i–)System.out.println(i); * * 也可以这样(0到10翻转):for (i <- 0 to 10 reverse ) println(i) */ //复制该段代码,可以自动转换成scala版本如下:输出结果是:10 9 8 7 6 5 4 3 2 1 0 //从10到0直到-1(不含-1) for (i <- 10 to 0 by -1) println(i) //10 9 8 7 6 5 4 3 2 1 0
/** * 4、编写一个过程countdown(n:Int),打印从n到0的数字 * reverse的作用是翻转 */ def countdown(n:Int): Unit = { for ( i <- 0 to n reverse) println(i) } //调用函数 countdown(6) // 6 5 4 3 2 1 0
/** * 5.编写一个for循环,计算字符串中所有字母的Unicode代码(toLong方法)的乘积。 * 举例来说,"Hello"中所有字符串的乘积为9415087488L */ var t :Long = 1L for (i <- "Hello"){ t = t * i.toLong } println(t) //9415087488
/** * 6、同样是解决前一个练习的问题,请用StringOps的foreach方式解决。 */ var x : Long = 1L "Hello".foreach(x *= _.toLong) println(x) //9415087488
/** * 7、编写一个函数product(s:String),计算字符串中所有字母的Unicode代码(toLong方法)的乘积 * */ def product(str:String): Unit ={ var t : Long = 1L for (i <- str){ t = t * i.toLong } println(t) //9415087488 } //调用函数 product("Hello")
/** * 8、把7练习中的函数改成递归函数 * * take (n) 取前n个字符,然后组成字符串; * drop (n) 去掉前n个字符,然后返回剩下的字符串 * takeRight 从后面取N个字符,组成字符串 * dropRight 从后面去掉N个字符安,剩下的字符组成字符串 */ def products(str:String) : Long = { var t : Long = 1L if (str.length == 1) return str.charAt(0).toLong else str.take(1).charAt(0).toLong * products(str.drop(1))