专业编程基础技术教程

网站首页 > 基础教程 正文

scala 系列之 03scala 控制结构 scala console

ccvgpt 2024-10-12 13:42:16 基础教程 8 ℃

4 控制结构

4.1 if 条件表达式#

if 语句用来实现两个分支的选择结构,语法如下:

scala 系列之 03scala 控制结构 scala console

if(表达式1){
    语句块1
}else if(表达式2){
    语句块2
}else{
    语句块3
}

运行逻辑和java相同,这块内容省略。

与java 不同的是, scala 可以通过if 语句实现 java 三目运算符的逻辑;

4.2 while 循环#

scala 拥有与java相同的while、do while 循环。

x = 1
while(x <= 10){
    print(x + " ")
    x = x + 1
}

x = 1
do{
    print(x = " ")
    x = x + 1
}while(x <= 10)

4.3 for 循环#

但scala没有与java相同的for循环,它的for循环语法

//跟java一样,只不过生成器里面的语法不一样,可以嵌套使用
for(生成器) 循环体
//高级for,for的推导式
for(生成器 [守卫] [;生成器 守卫]...) 循环体

其中:

1)生成器:是 变量 <- 表达式 的形式

1 to 3 : 返回 1 到 3 的序列

1 until 3:返回 1 到 2 的序列

scala> 1 to 3
res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)
scala> 1 until 3
res1: scala.collection.immutable.Range = Range(1, 2)

单层循环

scala> for(i <- 1 to 3) println("i=" + i)
i=1
i=2
i=3
// 在字符串中替换变量
scala> for(i <- 1 to 3) println(s"i=${i}")
i=1
i=2
i=3

输出双层循环中,外循环1到3, 内循环1到2

一般写法:

高级写法:

2)守卫:是以if开头的boolean表达式,每个生成器后面都可以跟一个

如:双层循环中,外循环1到3, 内循环1到2,输出外层循环1到2,内层循环1 的值

一般写法:

高级写法:

3)yield关键字结合for循环使用

val c = for(i <- 1 until 10) yield i

yield 的作用是把每次迭代生成的值封装到一个集合中,当然也可以理解成yield会自动创建一个集合

如果把yield去掉那返回给C的值就为Unit

4.4 循环控制语句#

Scala 不支持 break 或 continue 语句,但从 2.8 版本后使用另外一种方式来实现 break 语句。当在循环中使用 break 语句,在执行到该语句时,就会中断循环并执行循环体之后的代码块。

语法格式:

// 导入以下包
import scala.util.control.Breaks
// 创建 Breaks 对象
val loop = new Breaks
// 在 breakable 中循环
loop.breakable(
    // 循环
    for(...){
       ....
       // 循环中断
       loop.break
   }
)

代码:

import scala.util.control.Breaks
// 单例对象
object HelloWorld {
  def main(args: Array[String]): Unit = {
//    println("hello world")
    // 创建breaks对象
    val breaks = new Breaks
    println("实现break")
    // 实现 i == 3 退出循环
    breaks.breakable(
      // catch 异常
      for(i <- 1 to 5){
        // 抛异常
        if(i == 3) breaks.break()
        println(s"i=${i}")
      }
    )
    println("实现continue")
    for(i <- 1 to 5){
      breaks.breakable(
        if(i == 3){
          breaks.break()
        } else{
//          val n = 1 / 0
          println(s"i=${i}")
        }
      )
    }
  }
}

执行结果:

海汼部落原创文章,原文链接:(http://hainiubl.com/topics/75674)

Tags:

最近发表
标签列表