一、程序流程控制概述
1) 顺序控制
2) 分支控制
3) 循环控制
二、If
if (条件表达式 1) {
执行代码块 1
}
else if (条件表达式 2) {
执行代码块 2
}
……
else {
执行代码块 n
}
Scala 中任意表达式都是有返回值的,也就意味着 if else表达式其实是有返回结果的,具体返回结果的值取决于满足条件的代码体的最后一行内容
If 嵌套分支
一个分支结构中又完整的嵌套了另一个完整的分支结构
if(){
if(条件表达式){
执行代码块 1
}else{
执行代码块 2
}
}
三、switch
==在 scala 中没有 switch,而是 使用模式匹配来处理==
四、for 循环控制
1.范围数据循环方式
//输出 10 句 "hello"
for (i <- 1 to 10) { //包括右边部分
// for(i <- 1 until 11) // 不包括右边部分
println("hello " + i)
}
// 直接对集合进行遍历
for (item <- list) {
println("item=" + item)
}
2.循环守卫
① 循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环体内部,为 false则跳过,类似于 continue
// i从1到3,并且i不等于2
for(i <- 1 to 3 if i != 2) {
println(i + " ")
}
② 引入变量,没有关键字,所以范围后一定要加;来隔断逻辑
for(i <- 1 to 3; j = i + 10) {
println(j)
}
③ 嵌套循环
// 嵌套循环i从1-3 , j从2-4
for (i <- 1 to 3; j <- 2 to 4) {
println("i=" + i + " , j=" + j)
}
i=1 , j=2
i=1 , j=3
i=1 , j=4
i=2 , j=2
i=2 , j=3
i=2 , j=4
i=3 , j=2
i=3 , j=3
i=3 , j=4
④ 循环返回值
将遍历过程中处理的结果返回到一个新 Vector 集合中,使用 yield 关键字
val res = for(i <- 1 to 10) yield {
i // 实际上输出的就是i的集合
}
println(res)
⑤使用花括号{}代替圆括号(),可以省略分号
for{
i <- 1 to 3
j = i * 2
}
{
println(" i= " + i + " j= " + j)
}
⑥ 使用步长-Range控制
//Range(1,10,2) 的对应的构建方法是
//def apply(start: Int, end: Int, step: Int): Range = new Range(start, end, step)
for (i <- Range(1, 10, 2)) {
println("i=" + i)
}
五、while
while (循环条件) {
循环体(语句)
循环变量迭代
}
- 循环条件是返回一个布尔值的表达式
- while 循环是** 先判断,再执行 **语句
- 与 If 语句不同,While 语句本身没有值,即整个 While 语句的结果是 Unit 类型的()
- 因为 while 中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量 ,而变量需要声明在 while循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是 推荐使用 for 循环
六、do while
do{
循环体(语句)
循环变量迭代
} while(循环条件)
- 循环条件是返回一个布尔值的表达式
- do..while 循环是 先执行,再判断
- 和 while 一样,因为do…while中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量 ,而变量需要声明在do...while循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是 推荐使用 for 循环
七、while循环的中断
Scala 内置控制结构特地去掉了break和continue,是为了更好的适应函数化编程,推荐使用函数式的风格解决 break 和 contine 的功能,而不是一个关键字。
1.实现continue
for (i <- 1 to 10 if (i != 2 && i != 3)) {
println("i=" + i)
}
2.通过break字段(需要在 Breaks.breakable 中)
val breaks = new Breaks
breaks.breakable {
for (i <- 1 to 100) {
sum += i
if (sum > 20) {
println("第一次和大于 20 的当前数=" + i)
breaks.break()
}
}
}
3.通过重置状态 loop(true | false)
for (i <- 1 to 100 if loop == true) {
sum2 += i
if (sum2 > 20) {
loop = false
}
}