今天作了一个scala的for循环实验:scala
for(a<- 1 to 3;b<- 1 to 3) { println("a="+a) println("b="+b) }
实验结果以下:code
a=1 b=1 a=1 b=2 a=1 b=3 a=2 b=1 a=2 b=2 a=2 b=3 a=3 b=1 a=3 b=2 a=3 b=3
有点至关于数学中的组合问题。数学
val n=List(1,2,3,4,5,6,7,8,9,10) for(ns<-n if(ns!=3);if(ns<8)) { println(s"ns=$ns") }
实验结果以下:it
ns=1 ns=2 ns=4 ns=5 ns=6 ns=7
for循环能够看成一个变量的返回值,语法格式以下: var retVal=for(x<- list if(condition1);if(condition2);…)yield x 这种for yield循环中不能有执行语句吗?io
var v = for(j<-n if j!=3; if j<8) yield j for(vv<-v) { println(s"vv=$vv") }
执行结果:for循环
vv=1 vv=2 vv=4 vv=5 vv=6 vv=7
若是代码以下:编译
var v = for(j<-n if j!=3; if j<8) { println(j) } yield j
则编译时出现错误,提示‘;'expected but yield foundimport
scala没有break语句,须要用其它方法来实现,有多种方法,我列出一种:变量
import util.control.Breaks._ val n=List(1,2,3,4,5,6,7,8,9,10) breakable{ for(k<-n) { if(k==5) break else println(k) } }
执行结果:List
1 2 3 4
continue语句也没有,也须要变通(注意下面代码中breakable的位置与上面代码中的不一样之处):
import util.control.Breaks._ val n = List(1,2,3,4,5,6,7,8,9,10) for(k<-n) { breakable{ if(k==5) break else println(k) } }
执行结果:
1 2 3 4 6 7 8 9 10