文章目录
For循环控制
范围数据循环(To)
// 前后闭合
for (i <- 1 to 10) {
println(i)
}
范围数据循环(Until)
// 前闭后开
for (i <- 1 until 10) {
println(i)
}
循环守卫
for (i <- 1 to 10 if i != 2) {
println(i)
}
循环步长
for (i <- 1 to 10 by 2) {
println(i)
}
嵌套循环
for (i <- 1 to 3; j <- 2 to 4) {
println(s"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
// 九九乘法表
for (i <- 1 to 9) {
for (j <- 1 to i) {
print(s"$j*$i=${j*i}\t")
}
println()
}
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
引入变量
// 这里的j就等于10-i
for (i <- 1 to 10; j = 10 -i) {
println(s"i:$i j:$j")
}
// 下面写法也正确
for {
i <- 1 to 10
j = 10 -i
}
{
println(s"i:$i j:$j")
}
i:1 j:9
i:2 j:8
i:3 j:7
i:4 j:6
i:5 j:5
i:6 j:4
i:7 j:3
i:8 j:2
i:9 j:1
i:10 j:0
- for 推导式一行中有多个表达式时,所以要加 ; 来隔断逻辑
- for 推导式有一个不成文的约定:当 for 推导式仅包含单一表达式时使用圆括号,当包含多个表达式时,一般每行一个表达式,并用花括号代替圆括号
// 九妖塔
for (i <- 1 to 9) {
println(" "*(9-i)+"*"*(2*i-1))
}
// 或
for (i <- 1 to 9; starts="*"*(2*i-1); spaces=" "*(9-i)) {
println(spaces + starts)
}
// 或
for (starts <- 1 to 17 by 2; spaces=(17 - starts) / 2) {
println(" "*spaces + "*"*starts)
}
*
***
*****
*******
*********
***********
*************
***************
*****************
循环返回值
var list = for (i <- 1 to 10) yield i
println(list)
Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
While 和 do…While 循环控制
While 循环控制
while (循环条件) {
循环体(语句)
循环变量迭代
}
- (1)循环条件是返回一个布尔值的表达式
- (2)while 循环是先判断再执行语句
- (3)与 for 语句不同,while 语句没有返回值,即整个 while 语句的结果是 Unit 类型()
- (4)因为 while 中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量,而变量需要声明在 while 循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是推荐使用 for 循环。
do…while 循环控制
do {
循环体(语句)
循环变量迭代
} while(循环条件)
循环中断
采用异常的方式退出循环
try {
for (i <- 1 to 10) {
if (i == 5)
throw new RuntimeException
}
} catch {
case e=>
}
println("循环退出")
采用 Scala 自带的函数,退出循环
Breaks.breakable(
for (i <- 1 to 10) {
if (i == 5)
Breaks.break()
}
)