顺序控制
程序从上到下逐行地执行,中间没有任何判断和跳转。
分支控制
让程序有选择的的执行(在scala中没有switch),分支控制有三种:
- 单分支
- 双分支
- 多分支
单分支
基本语法:
当条件表达式为ture 时,就会执行 { } 的代码。
if (条件表达式) { 执行代码块 }
object IfElse {
def main(args: Array[String]): Unit = {
val age = 17
if (age < 18) {
println("小小飞未满18岁")
}
}
}
双分支
当条件表达式成立,即执行代码块1,否则执行代码块2。
基本语法:
if (条件表达式) { 执行代码块1 } else { 执行代码块2 }
流程图:
object IfElse {
def main(args: Array[String]): Unit = {
val age = 55
if (age < 18) {
println("小小飞未满18岁")
}else{
println("小小飞满18岁了")
}
}
}
多分支
说明:当条件表达式1成立时, 即执行代码块1,如果表达式1 不成立,才去判断表达式2是否 成立,如果表达式2成立,就执 行代码块2,以此类推,如果所 有的表达式都不成立,则执行 else 的代码块.
基本语法:
if (条件表达式1) { 执行代码块1 }else if (条件表达式2) { 执行代码块2 }……else { 执行代码块n }
object IfElse {
def main(args: Array[String]): Unit = {
val score = 50
if (score >= 90) {
println("优秀")
} else if (score >= 60) {
println("及格")
} else {
println("不及格")
}
}
}
循环控制
循环语句允许我们多次执行一个语句或语句组。
循环类型:
for循环
Scala 也为for 循环这一常见的控制结构提供了非常多的特性,这些for 循环的 特性被称为for 推导式(for comprehension)或for 表达式(for expression)。
语法:
Range 可以是一个数字区间表示 i to j ,或者 i until j。左箭头 <- 用于为变量 x 赋值。
for( var x <- Range ){
statement(s);
}
范围数据循环方式1
- i 表示循环的变量, 规则为to,范围为1-10
- i 将会从 1-10 循环, 前后闭合
object ForWhile {
def main(args: Array[String]): Unit = {
//范围数据循环方式1
for (i <- 1 to 10) {
println("第" + i + "次打印!!!")
}
}
}
范围数据循环方式2
- 这种方式和前面的区别在于 i 是从1 到9
- 前闭合后开的范围,和java的arr.length() 类似
object ForWhile {
def main(args: Array[String]): Unit = {
//until
for (i <- 1 until 10) {
println("第" + i + "次打印!!!")
}
}
}
嵌套循环
在 for 循环 中你可以使用分号 (😉 来设置多个区间,它将迭代给定区间所有的可能值。
object ForWhile {
def main(args: Array[String]): Unit = {
for (i <- 1 to 10; y <- 1 to 10) {
println("i第" + i + "次打印!!!")
println("y第" + y + "次打印!!!")
}
}
}
循环集合
语法:
for( x <- List ){
statement(s);
}
object ForWhile {
def main(args: Array[String]): Unit = {
val numList = List(1, 2, 3, 4, 5, 6)
for (i <- numList) {
println(i)
}
}
}
循环过滤
Scala 可以使用一个或多个 if 语句来过滤一些元素。为true则进入 循环体内部,为false则跳过,下述案例则只会数据第五次打印。
object ForWhile {
def main(args: Array[String]): Unit = {
for (i <- 1 to 10 if i == 5) {
println("第" + i + "次打印!!!")
}
}
}
引入变量循环
可以在循环时引入变量,每次循环时,此变量也会跟着变化
object ForWhile {
def main(args: Array[String]): Unit = {
for (i <- 1 to 10; j = 5 + i) {
println("第" + j + "次打印!!!")
}
}
}
循环返回值
你可以将 for 循环的返回值作为一个变量存储。将遍历过程中处理的结果返回到一个新Vector集合中,使用yield关键字。
语法:
注意大括号中用于保存变量和条件,retVal 是变量, 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。
object ForWhile {
def main(args: Array[String]): Unit = {
//to
var list = for (i <- 1 to 10) yield i
println(list)
}
}
while循环控制
只要给定的条件为 true,Scala 语言中的 while 循环语句会重复执行循环体内的代码块。
语法:
循环变量初始化
while (循环条件) {
循环体(语句)
循环变量迭代
}
注意事项:
- 循环条件是返回一个布尔值的表达式
- while循环是先判断再执行语句
- 与If语句不同,While语句本身没有值,即整个While语句的结果是Unit类型 的()
- 因为while中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免 的使用变量 ,而变量需要声明在while循环的外部,那么就等同于循环的内 部对外部的变量造成了影响,所以不推荐使用,而是推荐使用for循环。
object ForWhile {
def main(args: Array[String]): Unit = {
var i = 1
while (i <= 10) {
println(i)
i += 1
}
}
}
do…while循环控制
基本语法:
循环变量初始化;
do{ 循环体(语句) 循环变量迭代 }
while(循环条件)
注意事项:
- 循环条件是返回一个布尔值的表达式
- do…while循环是先执行,再判断
- 和while 一样,因为do…while中没有返回值,所以当要用该语句来计算并返回 结果时,就不可避免的使用变量 ,而变量需要声明在do…while循环的外部, 那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而 是推荐使用for循环
object ForWhile {
def main(args: Array[String]): Unit = {
var i = 1
do {
println(i)
i += 1
} while (i <= 10)
}
}
循环的中断
Scala内置控制结构特地也去掉了continue,是为了更好的适应函数化编程, 可以使用if – else 或是 循环守卫实现continue的效果。
示例:当i为奇数时跳过本次循环
object ForWhile {
def main(args: Array[String]): Unit = {
for (i <- 1 to 10; if i % 2 == 0) {
println(i)
}
}
}