scala 系列之 03scala 控制结构

教程 潘牛 ⋅ 于 2021-06-10 19:52:25 ⋅ 1787 阅读

4 控制结构

4.1 if 条件表达式

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

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

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

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

file

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

一般写法:

file

高级写法:

file

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

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

一般写法:

file

高级写法:

file

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

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

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

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

file

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}")
        }
      )
    }
  }
}

执行结果:

file

版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-潘牛,http://hainiubl.com/topics/75674
成为第一个点赞的人吧 :bowtie:
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter