4 控制结构
4.1 if 条件表达式
if 语句用来实现两个分支的选择结构,语法如下:
if(表达式1){
语句块1
}else if(表达式2){
语句块2
}else{
语句块3
}
运行逻辑和java相同,这块内容省略。
与java 不同的是, scala 可以通过if 语句实现 java 三目运算符的逻辑;
4.2 while 循环
scala 拥有与java相同的while、do while 循环。
x = 1
while(x <= 10){
print(x + " ")
x = x + 1
}
x = 1
do{
print(x = " ")
x = x + 1
}while(x <= 10)
4.3 for 循环
但scala没有与java相同的for循环,它的for循环语法
//跟java一样,只不过生成器里面的语法不一样,可以嵌套使用
for(生成器) 循环体
//高级for,for的推导式
for(生成器 [守卫] [;生成器 守卫]...) 循环体
其中:
1)生成器:是 变量 <- 表达式 的形式
1 to 3 : 返回 1 到 3 的序列
1 until 3:返回 1 到 2 的序列
scala> 1 to 3
res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)
scala> 1 until 3
res1: scala.collection.immutable.Range = Range(1, 2)
单层循环
scala> for(i <- 1 to 3) println("i=" + i)
i=1
i=2
i=3
// 在字符串中替换变量
scala> for(i <- 1 to 3) println(s"i=${i}")
i=1
i=2
i=3
输出双层循环中,外循环1到3, 内循环1到2
一般写法:
高级写法:
2)守卫:是以if开头的boolean表达式,每个生成器后面都可以跟一个
如:双层循环中,外循环1到3, 内循环1到2,输出外层循环1到2,内层循环1 的值
一般写法:
高级写法:
3)yield关键字结合for循环使用
val c = for(i <- 1 until 10) yield i
yield 的作用是把每次迭代生成的值封装到一个集合中,当然也可以理解成yield会自动创建一个集合
如果把yield去掉那返回给C的值就为Unit
4.4 循环控制语句
Scala 不支持 break 或 continue 语句,但从 2.8 版本后使用另外一种方式来实现 break 语句。当在循环中使用 break 语句,在执行到该语句时,就会中断循环并执行循环体之后的代码块。
语法格式:
// 导入以下包
import scala.util.control.Breaks
// 创建 Breaks 对象
val loop = new Breaks
// 在 breakable 中循环
loop.breakable(
// 循环
for(...){
....
// 循环中断
loop.break
}
)
代码:
import scala.util.control.Breaks
// 单例对象
object HelloWorld {
def main(args: Array[String]): Unit = {
// println("hello world")
// 创建breaks对象
val breaks = new Breaks
println("实现break")
// 实现 i == 3 退出循环
breaks.breakable(
// catch 异常
for(i <- 1 to 5){
// 抛异常
if(i == 3) breaks.break()
println(s"i=${i}")
}
)
println("实现continue")
for(i <- 1 to 5){
breaks.breakable(
if(i == 3){
breaks.break()
} else{
// val n = 1 / 0
println(s"i=${i}")
}
)
}
}
}
执行结果: