- 判断(if表达式)
- 循环(while/do语句)
- 枚举(for表达式)
- 匹配(match表达式)
- 异常处理(throw/try)
- 输出(print/println)
- 输入(readLine)
3.1 判断(if表达式)
- 检测语句是否为真,并执行之后的语句
- if(A) B ; else C (“;”号能省略吗?)
- A可以是任意返回布尔值的语句,或是布尔值的量,真则执行B,假则执行C;
- 当B为空时,可写成 if(!A) C
- def min(x:Int,y:Int)={
- var a=x
- if(x>y) a=y
- return a
- }
- def min(x:Int,y:Int)={
- if表达式能用以赋值
- def min(x:Int,y:Int)= if(x>y) y else x
3.2 循环(while/do)
- while语句包括状态判断与循环体,只要当前状态判断为真,就执行循环体一遍;然后进行下一次状态判断,判断为假时终止循环。
- while(A) B
- do语句与while相反,先执行循环体一遍,然后进行状态判断,状态判断为真,则继续执行循环体,否则终止循环。
- do B while(A)
- do B while(A)
3.3 枚举(for表达式)
-
For表达式能用任意条件进行各种形式枚举,而在枚举的过程中能实现绝大部分的循环功能且不必使用变量。
- for(i <- e) E(i)
- for表达式包括发生器(i <- e)同函数体E(i),
- 发生器是遍历e中的元素,每一次枚举名为i的新的val就被初始化
- 对于每一次枚举,函数体E(i)都会执行一次,而其中的参数i由枚举时进行赋值
- e可以是各种集合,包括数组、列、表达式等,或是有上下界的数值范围:
- 1 to 4 (1=<i<=4);1 until 4 (1=<i<=4-1)(不包含上界)
-
在for语句中使用if语句进行过滤
- for(i <- e) if(A) E(i)
- for(i <- e) if(A) E(i)
-
for语句中能使用多个if语句进行过滤,if语句间不用“;”间隔
-
for语句实现嵌套枚举,只要多加入一个<-字句
-
为了阅读和理解的方便,可以断行,或用花括号{}代替外层的()
-
for语句除了对枚举值进行操作并释放该值外,可以用以赋值,即把每一次枚举的值记录在集合中
-
for(i <- e) yield E(i)
- 若E(i)由花括号括起,yield须在花括号外,即for(i <- e) yield {E(i)}
- 若E(i)由花括号括起,yield须在花括号外,即for(i <- e) yield {E(i)}
3.4 匹配 (match表达式)
- match表达式类似于其他语言的switch语句,提供多个备选项中进行选择
- a match{
- case e1 => E1
- case e2 => E2
- … …
- }
- 若a匹配𝑒1则执行𝐸1,若a匹配𝑒2则执行𝐸2,如此类推
- a可以是数组、任意类型值等, 𝑒𝑛可以是对应的值、常量、变量、甚至是类型
- match表达式能用以直接赋值,如
- val sign = a match{case e1 => 123; case e2 =>“123”}
- 匹配是从上而下的
3.5 异常处理(throw/try)
- Scala处理异常一般通过throw抛出一个异常并中止
- 要么捕获并处理该异常,要么简单中止之
- 异常抛出:throw new IllegalArgumentException
- 异常捕获与处理:try{函数体} catch{case…;case…}
- 异常捕获并中止:try{函数体} finally{A.close()}
- try{函数体} catch{case…;case…} finally{A.close()}
- throw、try-catch-finally表达式都能生成值,比如:
- throw new IllegalArgumentException(“Error!”)
- def f():Int=try{1} finally{2}
3.6 输入输出
- 输出通常使用print或println函数,后者在输出内容后追加一个换行符
- println(A) A可以是值、表达式等,如:
- println(“a”)
- println(“a”+1)
- 当A是表达式时,输出的是表达式的运行结果
- 输入通常使用read函数,如readLine是从控制台读取一行输入,指定类型时为readT,T是所要指定的类型,如readInt等
- val name = readLine(“Your name :\n”) \readLine带一个参数作为提示字符串
- val age=readInt()
3.7 其他语句
- return 语句表示返回某个值,但是Scala事实上无须使用return语句
- 对于函数来说,其默认返回值是最后出现的一个值,不用特别注明。
- 如需要返回的值并非最后出现时,可在函数体后加上该值的标识符使之“出现”
- 声明函数时使用return语句,必须声明返回值的类型,如def abd():T={return}
- break/continue在C++中非常常见的控制结构语句,但在Scala中是不必要的,可以使用布尔值类型的量通过IF语句进行控制
3.8 控制循环结构实战
/**
* 控制结构
*/
val a = 10
val b = 5
//if
if(a > 5 && b == 5) println("yes")
//if-else
if(a > 5 && b != 5){
println("yes")
} else println("no")
//if-else if-else
if(a < 5){
println("option1")
} else if(a > 5) {
println("option2")
} else println("option3")
/**
* while循环
*/
var c = 4
while(c>0){
println(c)
c-=1 //修改条件变量
}
/**
* for循环
*/
for( i <- 1 to 3) print(i)
val lis1 = List(1,2,3,4)
for(i <- lis1) if(i%2==0) print(i)
for(i <- lis1 if i%2==0) print(i)
for(i <- lis1) print(i) lis1.foreach(print) //等价于上面
val news = for(i <- 1 to 4 if i!=3) yield ("res"+i)
print(news)
//求最大公约数
var a1 = 12
var a2 = 24
while(a1 != 0){
val tmp = a1
a1 = a2%a1 //修改条件变量
a2 = tmp
}
大数据视频推荐:
CSDN
大数据语音推荐:
企业级大数据技术应用
大数据机器学习案例之推荐系统
自然语言处理
大数据基础
人工智能:深度学习入门到精通