Scala

Scala-03-流程控制

2020-04-04  本文已影响0人  chen_666

注意事项

  1. 如果大括号{}内的逻辑代码只有一行,大括号可以省略, 这点和java 的规定一样。
  2. Scala中任意表达式都是有返回值的,也就意味着if else表达式其实是有返回结果的,具体返回结果的值取决于满足条件的代码体的最后一行内容.
  3. 在scala中没有switch,而是使用模式匹配来处理

for循环控制

for(i <- 1 to 3){ // 这里的 1 to 3 也可以是一个集合
  print(i + " ")
}

val list = List("北京", "广州", "深圳")

    for (item <- list) {
      println("item=" + item)
    }
  1. i 表示循环的变量, <- 规定好 to 规定
  2. i 将会从 1-3 循环, 前后闭合 (包括1 和 3)
for(i <- 1 until 3) {
  print(i + " ")
}
  1. 这种方式和前面的区别在于 i 是从1 到 (3-1)
  2. 前闭合后开的范围,和java的arr.length() 类似

循环守卫

for(i <- 1 to 3 if i != 2) {
  print(i + " ")
}
//等价于
for (i<-1 to 3){
      if ( i != 2) {
        println(i+" ")
      }
    }
  1. 循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为true则进入循环体内部,为false则跳过,类似于continue

引入变量

for(i <- 1 to 3; j = 4 - i) {
  print(j + " ")
}
//等价于
for (i <- 1 to 4) {
      val j = 4 - i
      println(s"i=${i} j=${j}")
}

嵌套循环

for(i <- 1 to 3; j <- 1 to 3) {
  println(" i =" + i + " j = " + j)
}

没有关键字,所以范围后一定要加;来隔断逻辑

循环返回值

val res = for(i <- 1 to 10) yield i * 2
 val res = for (i <- 1 to 10) yield  (i * 2)
    println("res=" + res)
val res2 = for (i <- 1 to 10) yield  {
      if (i % 2 == 1) {
        i
      }else {
        ()
      }
 }

将遍历过程中处理的结果返回到一个新Vector集合中,使用yield关键字,yield 可以写代码块.
1){}和()对于for表达式来说都可以
2)for 推导式有一个不成文的约定:当for 推导式仅包含单一表达式时使用圆括号,当其包含多个表达式时使用大括号
3)当使用{} 来换行写表达式时,分号就不用写了

控制步长

//说明 1: start
// 10: end 遍历到(end -1)
//  3: 表示step
for (i <- Range(1,10,3)) { //until
      println("i=" + i)
}

while 循环

  • while循环是先判断再执行语句
  • 与If语句不同,While语句本身没有值,即整个While语句的结果是Unit类型的()
  • 因为while中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量 ,而变量需要声明在while循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是推荐使用for循环。(scala设计者理念:能使用for循环,就先考虑使用.)
while (n <= 10) {
      println("hello,world" + n)
      n += 1 //循环遍历的迭代
}

while循环的中断

breakable {
      var n = 1
      while (true) {
        println("n=" + n)
        n += 1
        if (n == 18) {
          break()
        }
      }
    }
    println("程序继续....")//会打印出来
breakable {
      for (i <- 1 to 900000) {
        if (i == 99) {
          break()
        }
        println("i=" + i)
      }
    }
    println("程序继续....")//也会打印出来

使用if-else 或者循环守卫实现continue的效果

 for (i <- 1 to 10 if (i != 4 && i != 5)) {
      println("i=" + i)
 }
for(i <- 1 to 10){
      if (i != 4 && i != 5) {
        println("i=" + i)
   }
 }
上一篇 下一篇

猜你喜欢

热点阅读