scala(三) 流程控制

2022-04-11 16:18:36 浏览数 (1)

分支控制if-else

Scala IF...ELSE 语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。

单分支 if

可以通过下图来简单了解条件语句的执行过程:

ifif

语法:

代码语言:javascript复制
if(布尔表达式)
{
   // 如果布尔表达式为 true 则执行该语句块
}

案例:

代码语言:javascript复制
  def main(args: Array[String]): Unit = {

    val i=10
    if (i>5){
        println("大于5")
    }

  }
代码语言:javascript复制
大于5

双分支 if-else

语法:

代码语言:javascript复制
if (条件表达式) {
    执行代码块1
} else {
执行代码块2
}

案例:

代码语言:javascript复制
  def main(args: Array[String]): Unit = {

    val i=4
    if (i>5){
        println("大于5")
    }else{
      println("小于5")
    }

  }
代码语言:javascript复制
小于5

多分支 if-else if...else

语法:

代码语言:javascript复制
if (条件表达式1) {
    执行代码块1
} else if(条件表达式1){
        执行代码块2
} else if(条件表达式2){
        执行代码块3
} 
....
else{
      执行代码块N
}

案例:根据年龄判断该用户属于什么年龄阶段

代码语言:javascript复制
def main(args: Array[String]): Unit = {
    print("请输入你的年龄:")
    val age =StdIn.readInt()

    var tem=""
    if(age<=12){
      tem="儿童"
    }else if(12< age && age <=18 ){
      tem="青少年"
    }else if(18< age && age <=30 ) {
      tem = "青年"
    }else if(30< age && age <=60 ){
      tem = "中年"
    }else if(60< age && age <=150 ){
      tem = "老年"
    }else{
      println("非人类")
      return
    }
    println(s"你的年龄处于${tem}期")
  }
代码语言:javascript复制
请输入你的年龄:89
你的年龄处于老年期

嵌套分支

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层。分支外面的分支结构称为外层分支。嵌套分支不要超过3层。

代码语言:javascript复制
if(条件表达式1){
            if(条件表达式2){
                    执行代码块1
            }else{
                   执行代码块2
            }   
}

案例:网吧游戏校验

代码语言:javascript复制
 def main(args: Array[String]): Unit = {
    print("请输入你的年龄:")
    val age =StdIn.readInt()
    print("请输入你的性别:")
    val sex =StdIn.readChar()

    if(age>=18){
      if(sex.equals('男')){
        println("来玩CF")
      }else{
        println("来玩QQ炫舞")
      }
    }else{
      println("未成年人禁止玩游戏")
    }
  }
代码语言:javascript复制
请输入你的年龄:19
请输入你的性别:女
来玩QQ炫舞

我:感觉上面的内容和java没啥区别呀? scala:就这?我的强大你还没发掘呢。 我:?

块表达式

定义:由{}包裹的一段代码称为快表达式,块表达式可以有返回值,返回值是{}中最后一个表达式的结果值。

案例:块表达式定义与使用

代码语言:javascript复制
  def main(args: Array[String]): Unit = {

    val result={
      val a=10
      val b =20
      a b
    }

    println(result) // 30
  }

块表达式并不是方法,所以内部不能使用 return ;因为return 用于方法中,使用 return将会结束方法。

案例:运行只有,什么都打印;直接退出 main 方法

代码语言:javascript复制
def main(args: Array[String]): Unit = {

    val result={
      val a=10
      val b =20
      return a b
    }
    println("*"*10)
    println(result)
  }

正确操作

代码语言:javascript复制
  def main(args: Array[String]): Unit = {
    val result={
      val a=10
      val b =20
      a b
    }
    println("*"*10)
    println(result)
  }
代码语言:javascript复制
**********
30

至于作用域:块表达式内的变量只能访问 块外的定义的变量,外部无法访问块内部的变量。

代码语言:javascript复制
  def main(args: Array[String]): Unit = {
    val c=100
    val result={
      val a=10
      val b =20
      val d=b c
      a b d
    }
    println("*"*10)
    println(result)
  }
代码语言:javascript复制
**********
150

流程控制返回值

在 Scala 中一切皆为对象,if-else 也一样,是对象就有返回,if-else 的返回值 就是程序语句块最后一个代码的结果。 其原因:if 块也属于块表达式

案例:改改上面的代码

代码语言:javascript复制
def main(args: Array[String]): Unit = {
    print("请输入你的年龄:")
    val age =StdIn.readInt()
    print("请输入你的性别:")
    val sex =StdIn.readChar()

    val result=if(age>=18){
      if(sex.equals('男')){
        "来玩CF"
      }else{
        "来玩QQ炫舞"
      }
    }else{
      "未成年人禁止玩游戏"
    }
    println(result)
  }
代码语言:javascript复制
请输入你的年龄:65
请输入你的性别:男
来玩CF

0 人点赞