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