Scala流程控制

流程控制

分支控制

让程序有所选择的进行执行,分支控制有三种:单分支、双分支、多分支

单分支

if (条件表达式) {
    // 执行代码块
}

当条件表达式为true时,就会执行 {} 的代码

双分支

多分支

package chapter04

import scala.io.StdIn

object Test01_IfElse {
  def main(args: Array[String]): Unit = {
    print("请输入您的年龄:")
    val age: Int = StdIn.readInt()

    // 单分支
    if (age > 18) {
      println("成年")
    }

    println("====================")

    // 双分支
    if (age >= 18) {
      println("成年")
    } else {
      println("未成年")
    }

    // 多分支
    if (age <= 6) {
      println("童年")
    } else if(age <= 18) {
      println("青少年")
    } else if(age < 40) {
      println("青年")
    } else {
      println("老年")
    }

  }
}

返回值*

Scala中,分支表达式会有一个返回值。这个返回值,默认是执行的分支语句中的最后一句话。

package chapter04

import scala.io.StdIn

object Test01_IfElse {
  def main(args: Array[String]): Unit = {
    // 返回值
    val sex: Char = '男'
    val result = if (sex == '男') {
      println('男')
    } else if(sex == '女') {
      println('女')
    } else {
      println("不可告人的秘密")
    }

    println(s"result: ${result}")

    var resultStr: String = if (sex == '男') {
      println('男')
      "男"
    } else if(sex == '女') {
      println('女')
      "女"
    } else {
      println("不可告人的秘密")
      "不可告人的秘密"
    }

    println(s"resultStr: ${resultStr}")
  }
}

嵌套分支

if语句中可以嵌套if语句

for循环控制

Scala也为for循环这一常见的控制结构提供了非常多的特性,这些for循环的特性被称为for推导式或for表达式。

范围数据循环To

基本语法
for(i < -1 to 3) {
    // 代码
}

范围数据循环Unitl

循环守卫

基本语法
for(i <- 1 to 3 if i != 2) {
    // 代码
}

循环守卫,即循环保护式。保护式为true则进入循环内部;为false则跳过,类似于continue。

所以,上面的代码等价于

for (i <- 1 to 3) {
    if(i != 2) {
        // 代码
    }
}

循环步长

嵌套循环

基本语法
for(i <- 1 to 3; j <- 1 to 3) {
    // 代码
}

此语法等价于:

for(i <- 1 to 3) {
    for(j <- 1 to 3) {
        // 代码
    }
}

引入变量

基本语法
for(i <- 1 to 3; j = 4 - i) {
    // 代码
}

for推断式一行中有多个表达式时,所以要加;来阻断逻辑

for推导式有一个不成文的约定:当for推导式仅包含单一表达式时使用圆括号。

循环返回值

将遍历过程中处理的结果返回到一个新的Vector集合中,使用yield关键字。

基本语法
val res = for(i <- 1 to 10) yield i
println(res)

开发中很少这样使用。

倒序打印

while循环控制

while和do...while的使用和Java语言中用法相同

while

循环条件是返回一个布尔值的表达式

while循环是先判断再执行语句

与for语句不同,while语句没有返回值,即整个while语句结果是Unit类型。

因为while中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免使用变量,而变量需要生命在while循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用。

do...while

package chapter04

object Test05_WhileLoop {
  def main(args: Array[String]): Unit = {
    var a: Int = 10
    while (a >= 1) {
      println("This is a while loop:" + a)
      a -= 1
    }

    var b: Int = 0
    do {
      println("This is a do while loop:" + b)
      b += 1
    } while (b > 0)
  }
}

循环中断

Scala 内置控制结构特地去掉了break和continue,是为了更好的适应函数式编程,推荐使用函数式的风格解决break和continue的功能,而不是一个关键字。Scala中使用breakable控制结构来实现break和continue 功能。

package chapter04

import scala.util.control.Breaks

object Test06_Break {
  def main(args: Array[String]): Unit = {
    // 采用抛出异常的方式,退出循环
    try {
      for (i <- 0 until 5) {
        if (i == 3) {
          throw new RuntimeException
        }
        println(i)
      }
    } catch {
      case e: RuntimeException => // 什么都不做,只是抛出异常,退出循环
    }

    println("循环结束")

    // 2. 使用Scala中Breaks类中的break方法,实现异常的抛出和捕捉
    Breaks.breakable(
      for (i <- 1 until 10) {
        if (i == 3)
          Breaks.break()
        println(i)
      }
    )

  }
}
posted @ 2022-01-03 22:43  Gazikel  阅读(38)  评论(0编辑  收藏  举报