1.while
跟Java一样
eg;
var i = 1
while(i<10){
print("i is :"+i)
i+=1 //ps:不支持 i++
}
2.do ....while
跟Java一样,先执行一次 循环体
var i =0
do{
print("i is :" +i)
i+=1
}while(i < 10)
3.for
3.1基础语法:
for( var x <- Range by offset ){
statement(s);
}
Range 可以是一个数字区间表示 i to j ,或者 i until j。左箭头 <- 用于为变量 x 赋值。 by 可以指定步长,即每次 增加几 默认缺省值 为1
或者 range(1,100,2)
PS: to 是左右都闭区间, range 是左闭右开 区间,即不包含最后一位
eg1:
for(i <- 1 to 10){
println("i is :"+i)
}
输出结果: ps: 包含1 和 10 ,即:左右都闭区间
eg2:
for(i <- 1 to 10 by 3){
println(i)
}
输出:
eg3:
for(i <- range(1,10,2) ){
println(i)
}
输出:
3.2 遍历列表
val listA = List(1,2,3,4,5);
for(m <- listA){
print("elements is :"+m)
}
3.3 守卫表达式,即 for 加 if 判断,满足if 判断后执行代码块
val listA = List(1,2,3,4,5);
for(m <- listA
if m < 4; if m != 2){
print("elements is :"+m)
}
3.4 for循环推导式, 即 for循环之 yield
for 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala 中 for 循环是有返回值的。如果被循环的是 Map,返回的就是 Map,被循环的是 List,返回的就是 List,以此类推。
var testVar = for {i <- 1 to 10
if i % 3 == 0
} yield i
for(i <- testVar){
println(i)
}
输出结果:
eg2:
var testVar = for {i <- 1 to 10
if i % 3 == 0
} yield {print(i)
i }
println(testVar)
输出:
3.5 多生成器for循环
多个生成器 之间用 ; 分号隔开
eg:
for( i <- range(1,9); j <- range(1,9)){
println(i," * ",j,"=",i*j)
}
输出:
3.6 break continue
需要导入包: import scala.util.control.Breaks
break 终止当前循环;
eg:
val arr = Array(1, 2, 49, 4, 88, 10) breakable{ for(i <- arr){ if(i>5) break println(i) } }
输出:
类似Java中 continue 的实现:
eg: val arr = Array(1, 2, 66, 4, 88, 10) for(i <- arr){ breakable{ if(i >50){ break } println(i) } }
输出: