Scala流程控制

10 篇文章 0 订阅
本文详细讲解了编程中的单分支、双分支和多分支控制结构,通过Scala示例演示如何使用if-else、if-elseif-else和for循环嵌套实现逻辑控制。理解这些概念有助于提升代码结构的清晰度和灵活性。
摘要由CSDN通过智能技术生成

分支控制有三种:单分支、双分支、多分支

一、单分支

基本语法
if (条件表达式) 
{执行代码块}

说明:当条件表达式为 ture 时,就会执行{}的代码。

二、双分支

if (条件表达式) {
执行代码块 1
} else {
执行代码块 2
}

三、多分支

if (条件表达式 1) {
执行代码块 1
}
else if (条件表达式 2) {
执行代码块 2
}
……
else {
执行代码块 n
}

四、代码示例

1.Scala 中 if else 表达式其实是有返回值的,具体返回值取决于满足条件
的代码体的最后一行内容。

import scala.io.StdIn

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

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

     //双分支
     if (age >= 18) {
       println("成年")
     } else {
       println("未成年")
     }
 println("===========")
 //    //多分支
     if (age <= 6) {
       println("童年")
     } else if (age < 18) {
       println("青少年")
     } else if (age < 35) {
       println("青年")
     } else if(age < 60) {
       println("中年")
     }else{
       println("老年")
     }
     println("=========")

 //分支语句的返回值
 //Scala 中 if else 表达式其实是有返回值的,具体返回值取决于满足条件的代码体
 //的最后一行内容。
 //Scala 中返回值类型不一致,取它们共同的祖先类型
 val result: Any = if (age <= 6) {
   println("童年")
   "童年"
 } else if (age < 18) {
   println("青少年")
   "青少年"
 } else if (age < 35) {
   println("青年")
   age
 } else if (age < 60) {
   println("中年")
   age
 } else {
   println("老年")
   age
 }
 println("result:" + result)

 //java中三元运算符 String res = (age >= 18)?"成年":"未成年"
 //Scala中三元运算符
 val res1:String = if (age >= 18){
   "成年"
 }else{
   "未成年"
 }
 //如果大括号{}内的逻辑代码只有一行,大括号可以省略。
 //如果省略大括号,if 只对最近的一行逻辑代码起作用。
 val res2 = if (age >= 18) "成年" else "未成年"
 println("res1:" + res1)
 println("res2:" + res2)
}
}

五、嵌套分支

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

5.1 基本语法
if(){
if(){
}else{
}
}

5.2 代码示例

object Test02_IfElse {
  def main(args: Array[String]): Unit = {
    println("请输入您的年龄:")
    val age: Int = StdIn.readInt()
    //嵌套分支
    if (age >= 18) {
      println("成年")
      if (age >= 35) {
        if (age >= 60) {
          println("老年")
        } else
          println("中年")
      } else {
        println("青年")
      }
    } else {
      println("未成年")
      if (age <= 6) {
        println("童年")
      }
      else {
        println("青少年")
      }
    }
  }
}

六、For 循环控制

for 循环的特性被称为 for 推导式或 for 表达式

6.1 范围数据循环(To)

6.1.1 基本语法:

   for(i <- 1 to 3){
   print(i + " ")
   }
   println()

(1)i 表示循环的变量,<- 规定 to
(2)i 将会从 1-3 循环,前后闭合

6.1.2 代码示例:

for (i <- 1 to 10) {
      println(i + ". hello scala")
    }
    println("=======================================")

    for (i: Int <- 1.to(10)) {
      println(i + ".hello sc")
    }
    println("-------------------------------------")

6.2 范围数据循环(Until)

6.2.1 基本语法

		for(i <- 1 until 3) { print(i + " ")
		}
		println()
		
	(1)这种方式和前面的区别在于 i 是从 1 到 3-1
	(2)即使前闭合后开的范围

6.2.2 代码示例

    for (i <- 1 until 10) {
      println(i + ". hello scala")
    }
    
     //2.集合遍历
    for (i <- Array(12, 22, 32)) {
      println(i)
    }
    println("-------------------------------------")
    for (i <- List(12, 22, 33)) {
      println(i)
    }
    println("-------------------------------------")
    for (i <- Set(11, 22, 33)) {
      println(i)
    }

6.3 循环守卫

6.3.1 基本语法

for(i <- 1 to 3 if i != 2) { print(i + " ")
}
println(i)

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

6.3.2 代码示例

//3.循环守卫
    for (i <- 1 to 10) {
      if (i != 5) {
        println(i)
      }
    }
    println("=============================")
    for (i <- 1 to 10 if i != 5) {
      println(i) //1 2 3 4 6 7 8 9 10
    }

    println("---------------------------------")
    
    //循环步长
    for (i <- 1 to 10 by 2) {
      println(i) //1 3 5 7 9
    }
    println("---------------------------------")

    for (i <- 10 to 30 by 3) {
      println(i) //10 13 16 19 22 25 28
    }
    println("------------------------------")

    for (i <- 30 to 10 by -5) {
      println(i) // 30 25 20 15 10
    }

    println("------------------------------")
    for (i <- 1 to 5 reverse) {
      println(i) // 5 4 3 2 1
    }

    println("=============================")
    for (d <- 1.0 to 5.0 by 0.5) {
      println(d)  // 1.0 1.5 2.0 2.5
    }

6.4嵌套循环

6.4.1 语法

for(i <- 1 to 3; j <- 1 to 3) {
 println(" i =" + i + " j = " + j)
说明:没有关键字,所以范围后一定要加;来隔断逻辑

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

上述2个语法等价

6.4.2 代码示例

 def main(args: Array[String]): Unit = {
    //嵌套循环
    for (i <- 1 to 4){
      for (j <- 1 to 3) {
        println("i="+ i + ",j=" + j)
      }
    }
    println("=============================")


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

6.4.3 代码示例2

//九九乘法表
object Test03_Practice_mulTable {
  def main(args: Array[String]): Unit = {
    for (i <- 1 to 9) {
      for (j <- 1 to i) {
        print(s"$j * $i = ${i * j} \t")
      }
      println()
    }
  }
}

运行结果

1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81

6.5循环引入变量

代码示例:

object Test4_ForLoop1 {
  def main(args: Array[String]): Unit = {
    //循环引入变量
    for (i <- 1 to 10){
      val j = 10 -i
      println("i=" + i + ", j =" + j)
    }
    println("=============================")

    //等同于
    for (i <- 1 to 10 ; j =10 - i){
      println("i=" + i + ", j =" + j)
    }

    println("------------------------")

    //等同于
    for {i <- 1 to 10
    j = 10 - i}
      {
        println("i=" + i + ", j =" + j)
      }
  }
}

运行结果

i=1, j =9
i=2, j =8
i=3, j =7
i=4, j =6
i=5, j =5
i=6, j =4
i=7, j =3
i=8, j =2
i=9, j =1
i=10, j =0
=============================
i=1, j =9
i=2, j =8
i=3, j =7
i=4, j =6
i=5, j =5
i=6, j =4
i=7, j =3
i=8, j =2
i=9, j =1
i=10, j =0


i=1, j =9
i=2, j =8
i=3, j =7
i=4, j =6
i=5, j =5
i=6, j =4
i=7, j =3
i=8, j =2
i=9, j =1
i=10, j =0

(1)for 推导式一行中有多个表达式时,所以要加 ; 来隔断逻辑。
(2)for 推导式有一个不成文的约定:当 for 推导式仅包含单一
表达式时使用圆括号, 当包含多个表达式时,一般每行一个表达式,
并用花括号代替圆括号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值