第二讲 控制语句和函数
2018-04-02 本文已影响0人
农民工进城
本章主要内容
- if表达式
- 循环
- void类型 Unit
- 函数
2.1 if表达式
scala的 if表达式和 java差不多,如: if(a>b)a else b。
在scala中,每一个表达式,都是一个类型,例如:if(1>0) 1 else 0,是int类型。
但是有一个例外,如果只有if没有else,例如:if(1<0)1,永远不会满足条件,因此不会输出,但是在scala中每一个表达式都是一个类型,为了解决这个问题引入了Unit,用()来表示,所以上书表达式等同于if(1<0)1 else()
2.2 循环
scala有和java一样的while循环和do循环:
while循环格式如下:
var n=3;
while(n>0){
print(n);
n-=1;
}
do循环格式如下:
var n=3;
do{
print(n);
n-=1;
} while(n>0)
但是没有和java结构一样的for循环,但是有功能类似的for语句,格式如下:
语法结构是:
for(i <- 表达式){
//do something
}
for(n <- 1 to 3){
print(n)
}
util关键字
for(n <- 1 until 4){ //1-4 不包括4
print(n)
}
2.3 scala的break
break语法如下:
// import following package
import scala.util.control._
// create a Breaks object as follows
val loop = new Breaks;
// Keep the loop inside breakable as follows
loop.breakable {
// Loop will go here
for(...){
....
// Break will go here
loop.break;
}
}
举个例子:
def main(args: Array[String]) {
var a = 0;
val numList = List(1,2,3,4,5,6,7,8,9,10);
val loop = new Breaks;
loop.breakable {
for( a <- numList){
print( a );
if( a == 5 ){
println();
loop.break;
}
}
}
println( "*****end*****" );
}
运行结果:
break.png
2.4 高级for循环和for推导式
可以用 变量<- 表达式 的形式,提供多个生成器;
例子:乘法口诀表:
for (i <- 1 to 9; j <- 1 to 9) {
if (i >= j) {
print(j + "*" + i + "=" + (i * j) + " ")
if (i == j) {
println();
}
}
}
每个生成器都会有一个类似于过滤器的if语句;
例如:
for (i <- 1 to 5; j <- 1 to 5 if i==j) {
print(j + "*" + i + "=" + (i * j) + " ")
}
运行的结果是:
过滤.png
另外,scala的for循环中可以引入任意多的变量,比如
还可以这样
for (i <- 1 to 5; from=8-i;j <- from to 5 ) {
println(j + "*" + i + "=" + (i * j) + " ")
}
运行结果如下:
结果.png
for循环体的前面使用 yield 关键字:如果在for循环体前面加上yield关键字,则说明该for循环将输出1个集合,而每次循环的输出做为该集合中的一个元素。
例如:
var result=for (i <- 1 to 5) yield {
if(i%2==0){
i
}else{
0
}
}
println(result)
运行的结果是:
结果.png
2.5 函数的定义
Scala函数声明具有以下形式 -
def functionName ([list of parameters]) : [return type]
如果不使用等号和方法体,则隐式声明抽象(abstract
)方法。
函数定义
Scala函数定义具有以下形式 -
语法
def functionName ([list of parameters]) : [return type] = {
function body
return [expr]
}
这里,返回类型可以是任何有效的Scala数据类型,参数列表将是由逗号分隔的变量列表,参数列表和返回类型是可选的。与Java非常相似,返回语句可以与表达式一起使用,以防函数返回值。
例子1:求某个值的绝对值
def abs(i:Int):Int={
if(i>=0){
i
}else{
-i
}
}
例子2:递归求阶乘
def digui(i:Int):Int={
if(i<=0){
1
}else{
i*digui(i-1)
}
}
例子3:无返回值的函数
def dayin(str:String):Unit={
print("******start*******")
print(str)
print("******end*******")
}