1、Scala拥有与Java与C++相同的while和都循环
while(n > 0){
r = r * n
n -= 1
}
2、Scala的for循环
for(i <- 表达式)
说明:在for循环的变量之前并没有val或var的指定。该变量的类型是集合的元素类型。循环变量的作用域一直持续到循环结束。
3、遍历字符或数组时,可以使用until方法,until方法返回一个不包含上限的区间。
val s = "Hello"
var sum = 0
for(i <- 0 until s.length) // i的最后一个取值是s.length - 1
sum += s(i)
也可以直接遍历字符序列
var sum = 0
for(ch <- "Hello") sum += ch
Scala没有提供break或continue语句来退出循环。
4、高级for循环和for推导式
(1)变量<- 表达式 的形式可以提供多个生成器,用分号将他们隔开
scala> for(i <- 1 to 3; j <- 1 to 3) print((10 * i + j) + " ")
11 12 13 21 22 23 31 32 33
(2)每个生成器可以带一个守卫,以if开头的Boolean表达式
scala> for(i <- 1 to 3; j <- 1 to 3 if i != j) print((10 * i + j) + " ")
12 13 21 23 31 32
注意:在if之前并没有分号
(3)可以在循环中引入变量
scala> for(i <- 1 to 3; from = 4 - i; j <- from to 3) print((10 * i + j) + " ")
13 22 23 31 32 33
(4)for循环的循环体以yield开始,则会循环会构造出一个集合,每次迭代生成的一个值----0for推导式
scala> for(i <- 1 to 10) yield i % 3
res42: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)
for推导式生成的集合与它的第一个生成器是类型兼容的
scala> for(c <- "Hello"; i <- 0 to 1) yield (c + i).toChar
res46: String = HIeflmlmop
scala> for(i <- 0 to 1; c <- "Hello") yield (c + i).toChar
res47: scala.collection.immutable.IndexedSeq[Char] = Vector(H, e, l, l, o, I, f, m, m, p)