zoukankan      html  css  js  c++  java
  • 【Scala】02 循环

    1、支持集合直接作为循环体的条件:

    // - - - - 支持集合遍历 - - - -
    var arr = Array(10, 20, 30)
    var arr2 = List(10, 20, 30)
    var arr3 = Set(10, 20, 30)
    for (i <- arr) println(i)
    for (i <- arr2) println(i)
    for (i <- arr3) println(i)

    2、循环守卫,支持一些寻找特定条件的循环

    // 相当于一个语法糖,缩写了很多东西,不满足IF条件的循环等同于执行了continue
    for (i <- 1 to 3 if i != 2) {
      println(i)
    }
    
    // 拓展出来就是 从1重复执行到3,当i不等于2时执行打印i
    for (i <- 1 to 3) {
      if (i != 2) {
        println(i)
      }
    }

    3、对步长的设置

    // - - - - 步长设置 - - - -
    for (i <- 1 to 100 by 2) {
      println(i) // 1 3 5 7 9 .... by设置步长
    }
    
    for (i <- 1 to 100 by -2) {
      println(i) // 如果正向迭代,不可以这样设置负数的步长,迭代将不会跳出来,这样是一个死循环了
    }
    
    for (i <- 100 to 1 by -4) {
      println(i) // 表示反向的循环
    }
    
    for (i <- 1 to 10 reverse) { // 也可以使用reverse来表示逆向循环
      println(i)
    }
    
    for (i <- 0.1 to 3.14 by 0.2) { // for也可以使用浮点数进行循环,但是会有精度问题,不建议使用
      println(i)
    }

    4、嵌套循环

    // 嵌套循环
    
    // Java语法
    for (i <- 1 to 10) {
      for (j <- 1 to 5) {
        println(s"i = ${i}, j = ${j}")
      }
    }
    // Scala语法可缩写至
    for(i <- 1 to 10; j <- 1 to 5) {
      println(s"i = ${i}, j = ${j}")
    }
    
    // 乘法表案例
    for (row <- 1 to 9; column <- 1 to row) {
      print(s"${row} * ${column} = ${row * column}	")
      if (row == column) println()
    }

    5、引入变量

    for {
      // 当需要写入多种条件时,可以使用这种展开的条件体
      iterator <- 1 to 10
      variable = iterator - 3
    }
    {
      println(s"iterator = ${iterator}, variable = ${variable}")
    }

    6、九层妖塔案例

    // 方案1
    for(level <- 1 to 9) {
      val symbol = 2 * level  - 1
      val blank = 9 - level
      println(" " * blank + "*" * symbol)
    }
    
    // 方案2
    for {
      level <- 1 to 9
      symbol = 2 * level  - 1
      blank = 9 - level
    } {
      println(" " * blank + "*" * symbol)
    }
    
    // 方案3
    for {
      symbol <- 1 to 17 by 2
      blank = (17 - symbol) / 2
    } {
      println(" " * blank + "*" * symbol)
    }

    7、循环的返回

    // 循环返回
    val result = for(iterator <- 1 to 10) {} // for循环的默认返回值为UNIT
    
    // yield 指定一个变量为循环装填的元素
    val vector = for(iterator <- 1 to 10) yield iterator // for会返回一个Vector集合容器给vector变量
    println(vector) // 打印输出 Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

    8、While循环

    do while 和 while 和 Java 一致,没有做语法处理,这里跳过省略了

    9、循环退出

    Scala语法这里不再支持Break和Continue,改用了一个Breakable控制结构体来实现

    // Java语法
    try {
      for (i <- 0 until 5) {
        if (i == 3) throw new RuntimeException
        println(i)
      }
    } catch {
      case exception: Exception => println(exception) // 打印报错
    }
    println("after exception...")
    
    // Scala 这里就是用Break类的breakable方法把try-catch进行了封装
    Breaks.breakable(
      for (i <- 0 until 5) {
        if (i == 3) Breaks.break()
        println(i)
      }
    )
    
    /**
     * 可以直接引入Break的所有资源,这样可以省略写法
     * import scala.util.control.Breaks._
     */
    breakable(
      for (i <- 0 until 5) {
        if (i == 3) break()
        println(i)
      }
    )
  • 相关阅读:
    JVM调优之Tomcat启动加速(二)
    JVM调优(一)
    安装SqlServer的时候性能计数器注册表配置单元一致性失败的解决办法
    VS2013崩溃,无法打开项目的解决方案
    C#实现函数默认值和C#4.0实现默认值
    日志管理
    PXE网络装机服务
    NFS网络共享搭建
    NFS共享
    linux文件系统文件删除并恢复
  • 原文地址:https://www.cnblogs.com/mindzone/p/14994509.html
Copyright © 2011-2022 走看看