Scala学习三:循环
Scala 循环
Scala中有for,while两种形式
while循环的方式与Java中的一样,不再赘述.
Scala中没有Java的
for(变量声名; 条件控制; 变量控制)
只有
for(n <- 1 to n)
// 包含n值
// 及
for(n <- 1 until n)
// 不包含n值
Scala for循环中的变量名前不需要val,var。类型是集合中的变量类型。作用域郁着循环结束。
Scala中没有break, continue来退出,控制循环.
import scala.util.control.Breaks._
breakable {
for (...) {
if (...) {
break
}
}
}
breakable 必须完全包裹住整个for循环块,否则将不能退出循环。
break 跳出循环是通过抛出 和 捕获 异常来完成的。对于时间要求很高的情况,应减少使用。
高级for循环形式:
Scala的for循环可以有多个 变量<-表达式 形式的生成器,每个生成器之间用 “;” 隔开
// Scala代码
for(outer <- 1 to 3; inner <- 1 to 3){
println(10 * outer + inner)
}
// Java代码
// 其作用就相当于Java的双层for循环
for(int outer = 1; outer <= 3; outer++){
for(int inner = 1; inner <= 3; inner++){
System.out.println( 10 * outer + inner)
}
}
for循环生成器守卫:
// Scala代码:
// 同时每个生成器可以带一个守卫:
for(outer <- 1 to 5 if outer % 2 != 0; inner <- 1 to 5 if inner % 2 == 0){
println(10 * outer + inner)
}
其作用就相当于Java的双层for循环:
// Java代码:
for(int outer = 1; outer <= 5; outer++){
if(outer % 2 != 0){
for(int inner = 1; inner <= 5; inner++){
if(inner % 2 == 0){
System.out.println( 10 * outer + inner)
}
}
}
}
而且还可以使用任意多的定义,引用可以在循环中使用的变量:
for(outer <- 1 to 5; middle = 6 - outer ; inner <- middle to 5) {
println(10 * outer + inner)
}
for yield:
如果For循环体内以yield开始,则循环会构成一个集合,每次迭代生成集合中的一个值
val col = for(a < 1 to 5) yield {
"Word" + a
}
// col是一个集合:IndexedSeq[String]
错误的写法,如果返回集合。yield必须紧跟for循环表达式。
for(a < 1 to 5){
yield {
"Word" + a
}
}