循环守卫
循环守卫的概念,通过足球守门员的比喻,说明了循环守卫的作用是控制循环的执行。具体实现是通过在for循环中添加if判断语句,如果条件不满足则跳出循环。
基本格式:
(1) 循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环体内部,为false 则跳过,类似于continue。
(2) 上面的代码等价
示例如下:
需求:输出 1 到 5 中,不等于 3 的值
循环步长
在for循环中设置步长,默认步长为1,可以通过指定步长来改变循环的取值间隔。例如,设置步长为2时,循环变量会每次增加2。
1) 基本语法
for (i <- 1 to 10 by 2)
{ println("i=" + i)
}
说明:by 表示步长
示例如下:
需求:输出 1 到 10 以内的所有奇数
嵌套循环
嵌套循环指在一个循环结构内部包含另一个循环结构。常用于处理需要多重迭代的场景
1) 基本语法
2) for(i <- 1 to 3; j <- 1 to 3) { println(" i =" + i + " j = " + j)
}
说明:没有关键字,所以范围后一定要加;来隔断逻辑
3)基本语法
for (i <- 1 to 3) {
for (j <- 1 to 3) {
println("i =" + i + " j=" + j)
}
}
引入变量
1) 基本语法
for(i <- 1 to 3; j = 4 - i) { println("i=" + i + " j=" + j)
}
(1) for 推导式一行中有多个表达式时,所以要加 ; 来隔断逻辑
(2) for 推导式有一个不成文的约定:当 for 推导式仅包含单一表达式时使用圆括号, 当包含多个表达式时,一般每行一个表达式,并用花括号代替圆括号,如下
for {
i <- 1 to 3 j = 4 - i
} {
println("i=" + i + " j=" + j)
示例如下:
循环返回值
通过for循环返回一个集合。使用yield关键字可以在循环中逐个返回值,最终形成一个包含所有返回值的集合。
1) 基本语法
val res = for(i <- 1 to 10) yield i
println(res)
for(i <- 1 to 10 reverse){ println(i)
}
说明:将遍历过程中处理的结果返回到一个新 Vector 集合中,使用 yield 关键字。Kaifa
示例如下:
倒序打印
使用reverse关键字实现倒序打印。通过在for循环中添加reverse关键字,可以实现数据的倒序输出。
1) 说明:如果想倒序打印一组数据,可以用 reverse。
2) 示例如下:
需求:倒序打印 10 到 1
循环中断
在scholar中没有break和continue关键字,推荐使用函数式编程风格来实现循环中断。通过抛出异常或调用特定函数可以实现循环的中断。
多重循环与多分支选择
scholar中没有switch关键字,多分支选择可以通过函数式编程的方式来实现。
1) 基本说明
(1) 将 一 个 循 环 放 在 另 一 个 循 环 体 内 , 就 形 成 了 嵌 套 循 环 。 其 中 ,for,while,do…while均可以作为外层循环和内层循环。【建议一般使用两层,最多不要 超过 3 层】
(2) 设外层循环次数为m 次,内层为 n 次,则内层循环体实际上需要执行 m*n 次。
示例如下:鸡兔同笼问题