格式
for (i <- 0 to|until 5){ 循环体 } for (i <- 1 to 5){ println(s"i=$i") }
- i :i 是接收
for循环次数的 变量
,不用声明是因为 Scala 能自动推断 - to : 是 [ 0, 5],是
前后都包含
的意思 - until : 是 [ 0, 5),是
前包含后不包含
的意思
详解 to 和 until 到 Range() 控制循环步长
1.to(5) -简写-> 1 to 5
0.until(5) -简写-> 0 until 5
until 和 to 的源码里都调用了一个 Rang() 的方法,所以 for 循环还能这样写
for (i <- Range(0,5)){ println(s"第 $i 次") } ---------------------- 第 0 次 第 1 次 第 2 次 第 3 次 第 4 次
Range() 控制循环步长
for (i <- Range(0,5,2)){
println(s"第 $i 次")
}
----------------------
第 0 次
第 2 次
第 4 次
小案例
一层循环打印九层妖塔
for (i <- Range(1,18,2)){ println(" "*((18-i)/2) + "*"*i + " "*((18-i)/2) ) }
守卫循环
循环守卫: 所谓循环守卫就是 加一个判断,成立执行循环体,不成立跳过本次循环
跟 Java 和 Python 中的 continue 一样
for (i <- 1 to 6 if i % 2 == 0){ println(s"i = $i") } ------------------------------- i = 2 i = 4 i = 6
其实也可以等价于
for (i <- 1 to 6 ){ if (i % 2 == 0) { println(s"i = $i") }
引入变量
格式
// 原本格式,分号隔开 for (i <- 1 to 5; f = i % 2){ println(s"i = $i: f = $f") } // 写一行 ; 隔开逻辑,注意大括号 for {i <- 1 to 5 ; f = i % 2}{ println(s"i = $i: f = $f") } // 不要分号 换行 隔开逻辑 for {i <- 1 to 5 f = i % 2}{ println(s"i = $i: f = $f") }
所以小案例变换
// 要分号 for {i <- Range(1,18,2); j = ((18-i)/2)} { println(" "*j + "*"*i + " "*j ) } // 不要分号 代码块 for { i <- Range(1,18,2) j = ((18-i)/2) } { println(" "*j + "*"*i + " "*j ) }
for 的返回值
一般情况 for 都没有返回值
// for 的返回值 一般情况 for 的返回值都是 Unit val res: Unit = for (i <- 1 to 5) { "abc" }
yeild 特殊情况
它会把结果返回成一个集合
val value = for (i <- 1 to 5) yield i println(value) ------------------------------------- Vector(1, 2, 3, 4, 5)
for 跳出循环
Scala 是完全面向对象的语言,所以没有 break。
Scala 使用的 产生一个特定的异常,然后进行类似异常处理来保证后面代码的正常运行
// 产生异常,结束循环 for (i <- 1 to 5) { if (i == 3) { Breaks.break() } println(s"s = $i") } ---------------------- s = 1 s = 2 Exception in thread "main" scala.util.control.BreakControl
对异常进行特定处理,保证后面正常运行
Breaks.breakable ( // 这对小括号可以换成 大括号(表示包裹代码块) for (i <- 1 to 5) { if (i == 3) { Breaks.break() } println(s"s = $i") } ) println("跳出循环") --------------------------- s = 1 s = 2 跳出循环
上一篇
Scala 函数基础使用
Scala 函数基础使用
下一篇
Scala 的四种打印
Scala 的四种打印
版权声明:《 Scala 流程控制 之 for 循环 》为明妃原创文章,转载请注明出处!
最后编辑:2020-1-30 16:01:55