Scala流程控制结构
1.顺序结构
程序是从上到下,从左至右的顺序,依次逐行执行的(Scala默认)。
2.选择结构
2.1单分支
格式:
if(关系表达式){
具体代码
}
2.2多分支
格式:
if(关系表达式1){
//代码1
} else if(关系表达式2){
//代码2
} else if(关系表达式n){ //else if可以有多组
//代码n
} else(关系表达式2){ //所有的关系表达式都不成立的适合,执行这里的代码
//代码n+1
}
3.注意事项
- 和 Java 一样,如果大括号内只有一行代码可省略大括号
- 条件表达式有返回值(Java没有)
- 没有三元表达式,可以使用 if-else 代替
val sex = "male"
val result = if(sex == "male") 1 else 0
println("result: " + result) //打印结果为 result: 1
4.扩展:块表达式
使用一对大括号表示一个块表达式,块表达式也是有返回值的,最后一个表达式的值就是返回值。
val a = {
println("1 + 1")
1 + 1
}
println("a: " + a)
//输出结构为 a:2
5.循环结构
5.1 for循环
5.1.1简单循环
Scala中,for的格式和用法和Java有些差异,Scala的for表达式功能更强大。
格式:
for(i <- 表达式/数组/集合) {
//逻辑代码
}
示例:
打印10次"Hello"
val nums = 1 to 10
for(i <- nums) {
println("Hello")
}
上述代码可以简写成:
for(i <- 1 to 10) println("Hello")
5.1.2 嵌套循环
需求:
使用for表达式,打印以下字符,每次只能输出一个"*"
*****
*****
*****
//写法一:普通版
for(i <- 1 to 3) {
for(j <- 1 to 5) {
print("*")
}
println() //打印完一行后,记得换行
}
//写法二:简略版
for (i <- 1 to 3) {
for (j <- 1 to 5) if(j == 5) println("*") else print("*")
}
//写法三:合并版
for(i <- 1 to 3; j <- 1 to 5) if(j == 5) println("*") else print("*")
5.1.3 守卫
for表达式中,可以添加if判断语句,这个if判断就是守卫,能让for表达式更简洁。
格式:
for(i <- 表达式/数组/集合 if 表达式) {
//逻辑代码
}
示例:
使用for表达式打印1-10之间能够整除3的数字。
for(i <- 1 to 10 if 1 % 3 == 0) println(i)
5.1.4 for推导式
Scala的for循环也是有返回值的,在for循环体中,可以使用yield表达式构建出一个集合(可以理解为一组数据),我们把使用yield的for表达式称之为推导式。
示例:
生产一个10、20、30…100的集合。
val v = for(i <- 1 to 10) yield i * 10
println(v)
//结果为:Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
5.2 while循环
Scala的while循环跟Java一样。
格式:
初始化条件
while(判断条件) {
//循环体
//控制条件
}
5.3 do.while循环
Scala的do.while循环跟Java一样。
格式:
初始化条件
do {
//循环体
//控制条件
} while(判断条件)
注意 :do.while循环不管判断条件是否成立,循环体都会执行一次。
5.4 break和continue
- 在 Scala 中,移除了类似java和C++的break 和 continue 关键字
- 如果要使用,需要 scala.util.control 包下的 Breaks 类的 breakable 和 break
方法
5.4.1实现break
用法:
- 导包:
import scala.util.control.Breaks._
- 使用breakable将for表达式包起来
- for表达式中需要退出循环的地方,添加
break()
方法调用
示例:
使用for表达式打印1-10的数字,如果遇到数字5,则退出for表达式。
import scala.util.control.Breaks._
breakable{
for(i <- 1 to 10) {
if(i == 5) break() else println(i)
}
}
5.4.2 实现continue
实现continue与break类似,但有一点不同:
实现break是用breakable{}将整个for表达式包起来,而实现continue是用breakable{}将for表达式的循环体包含起来就可以了。
示例:
用for表达式打印1-10之间,所有不能整除3的数字
import scala.util.control.Breaks._
for(i <- 1 to 100) {
breakable{
if(i % 3 == 0) break()
else println(i)
}
}