scala条件控制和循环

  • 条件控制

条件控制的语法结构和java是一样的。但与java很大的区别在于,scala里的if/else语句是有返回值的。例如:

         if(x > 0) x else 0

可赋值给变量,例如:

         val a = if(x > 0) x else 0

返回的值也可以是混合型数据,例如:

         val a = if(x > 0) 1 else "hello"//此处a是Any类型的数据

else部分也可以缺失,例如:

         val a = if(x < 0) 1//这个表达式实际等同于val a = if(x < 0) 1 else ()

()表示Unit类,是无返回值的意思,类似java中void

  • 块表达式

块表达式中在java中也很常见,条件控制、循环迭代后面都跟着块表达式来处理逻辑动作,从上面的条件控制中就可以看出来java的块表达式是没有返回值的,而scala中块表达式是有值的,如果块表达式没有值,那么条件控制是有返回值的就说不通了。

val a = {var x = 1;println("x = " + x); x + 1} //先打印x=1,然后将x+1的值赋值给a

稍微变动一下:

         val a = {var x = 1;println("x = " + x); x += 1}

后面改为x += 1 是x自加1操作,并没有返回值,所以返回的事一个Unit类型,块表达式的返回值完全取决于最后一个表达式

  • 循环

Scala中的while、do语句和java一样,有区别的是for语句,for循环语法如下:

         for(i <- 表达式)

让变量i遍历<-右边全部的值,遍历数组通常是从0到n-1的区间,这时候需要使用until方法,until方法返回一个不包含上限的区间

Scala中没有提供break或continue关键字来跳出循环,scala控制循环有以下几个方法:

  1. 使用Boolean控制变量
  2. 嵌套return
  3. 使用scala.util.control.Breaks对象中的break方法跳出循环

  • for循环的高级特性

for循环中可以以”变量 <- 表达式”的形式提供多个循环的生成器,例如:

         for(i <- 1 to 3; j <- 1 to 4) print(i+"-"+j+" ,")

根据结果可以看出,多个循环生成器从左至右依次,就是对应java中for循环的嵌套,向内部循环

         Scala:for(生成器A;生成器B……)等同于

         Java:for(生成器A){

                            for(生成器B){

                                     ……

                            }

                    }

每一个生成器都可以有一个守卫,用于循环时的判断,以if开头返回Boolean对象

for(i <- 1 to 3; j <- 1 to 4 if j != 2) print(i+"-"+j+" ,")//j不等于2的时候才打印

 

还可以再for循环生成器中引入在循环中使用的变量

        for(i <- 1 to 3; jfrom = 3 - i; j <- jfrom to 4 ) print(i+"-"+j+" ,")

当i=1时,jfrom=2,此时j <- jfrom to 4 就是j <- 2 to 4

如果for循环的循环体的循环体以yield开始,循环体会构造一个集合,每次迭代的返回值都放入到这个集合中,例如:

         for(i <- 1 to 3) yield i

返回的是scala.collectioin.immutable.IndexedSeq[Int]类型的集合。

当循环的是一个数组,例如

         val arr = Array(1,2,3,4)

         for(i <- arr) yield i

可以看到如果循环的事数组,返回的结果也是数组。由上可知使用yield操作时,yield结果集合类型与生成器中的(第一个)生成器类型相同。

for循环中生成器、守卫和定义太多时,写在一行代码可读性较差,可以将生成器、守卫和定义放在{}中,并换行不用在每行结尾写分号,例如:

        for{i <- 1 to 3

              jfrom = 3 - i

              j <- jfrom to 4 } {

                   print(i+"-"+j+" ,")

               }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值