6.Scala程序流程控制

一、程序流程控制概述

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 (循环条件) {
    循环体(语句)
    循环变量迭代
}
  1. 循环条件是返回一个布尔值的表达式
  2. while 循环是** 先判断,再执行 **语句
  3. 与 If 语句不同,While 语句本身没有值,即整个 While 语句的结果是 Unit 类型的()
  4. 因为 while 中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量 ,而变量需要声明在 while循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是 推荐使用 for 循环

六、do while

do{
    循环体(语句)
    循环变量迭代
} while(循环条件)
  1. 循环条件是返回一个布尔值的表达式
  2. do..while 循环是 先执行,再判断
  3. 和 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
    }
}

你可能感兴趣的:(6.Scala程序流程控制)