scala运行在java虚拟机上,它在拥抱函数式编程的同时,又没有废弃面向对象,这是一种全新的编程范式。本文的内容为基本的控制结构和函数一章的答案。
一个数字如果为正数,则它的signum为1,如果为负数,则signum为-1,如果为0,则signum为0.编写一个函数来计算这个值。
一个空的表达式{}的值是什么?类型是什么?
在scala中,{}块包含一系列表达式,其结果也是一个表达式,块中最后一个表达式的值就是块的值。
如图所示,类型是Unit类型,它的值就是(), 等同于Java中的void。
指出Scala中何种情况下赋值语句x=y=1是合法的。
赋值语句是Unit类型的,所以应该把x赋值成Unit类型。
针对下列Java循环编写一个Scala版:
for(int i=10; i>=0;i–) System.out.println(i);
编写一个过程countdown(n:Int),打印从n到0的数字
或者写成:
编写一个for循环,计算字符串中所有字母的Unicode代码的乘积。举例来说,”Hello”中所有字符串的乘
积为9415087488L
同样是解决前一个练习的问题,但这次不使用循环。
编写一个函数product(s:String), 计算前面练习中提到的乘积。
把前一个练习中的函数改成递归函数。
以object形式来运行
object Test9{
def main(args: Array[String]){
val str = "hello"
var result = 1
result = product(str)
println(result)
}
def product(s:String) : Int = {
if(s.length == 1){
s(0).toInt
}else{
s(0).toInt * product(s.substring(1));
}
}
}
运行: scala TestQ9
结果: 714668928
编写函数计算 xn ,其中n是整数,使用如下的递归定义:
- xn=y2 ,如果n是正偶数的话,这里的 y=xn/2
- xn=x⋅xn−1 , 如果n是正奇数的话
- x0=1
- xn=1/x−n ,如果n是负数的话
不得使用return语句
object Test10{
def main(args: Array[String]){
println(pow(5,2))
println(pow(5.toDouble,0))
println(pow(5.toDouble,1))
println(pow(5.toDouble,-1))
}
def pow(x:Double,n:Int) : Double = {
if(n == 0){
1
}else if(n<0){
1/pow(x,-n)
}else if (n % 2 ==0){
pow(x,n/2)*pow(x,n/2)
}else{
pow(x,n-1)*x
}
}
}
输出:
25.0
1.0
5.0
0.2