专栏首页悠扬前奏的博客Scala-4.控制结构-break和continue

Scala-4.控制结构-break和continue

Scala中没有break和continue这两个关键字,而是以scala.util.control.Breaks类的工具形式提供的。并且需要加上breakable方法来修饰语句块:

import util.control.Breaks._

object BreakAndContinueDemo extends App {
  println("\n=== BREAM EXAMPLE ===")
  breakable {
    for (i <- 1 to 10) {
      println(i)
      if (i > 4) break
    }
  }

  println("\n=== CONTINUE EXAMPLE ===")
  val searchMe = "peter piper picked a peck of pickled peppers"
  var numPs = 0
  for (i <- 0 until searchMe.length) {
    breakable {
      if (searchMe.charAt(i) != 'p') {
        break
      } else {
        numPs += 1
      }
    }
  }
  println("Found" + numPs + "p's in the string.")
}

以上代码的执行结果是:

=== BREAM EXAMPLE ===
1
2
3
4
5

=== CONTINUE EXAMPLE ===
Found9p's in the string.

实际上执行到break方法时,一个异常被抛出,for循环结束。breakable方法会捕获异常,控制流继续执行被打断的代码块后面的其他代码。 continue方法类似,只是在捕获异常之后伴随下一个元素继续执行。

Scala中Continue的快捷用法

下面的代码和例子中的效果一样。

val length = searchMe.count(_ == 'p') 

嵌套使用Break

可以通过标记break语句的方式创建多个嵌套的break:

object LabeledBreakDemo extends App {

  import scala.util.control._

  val Inner = new Breaks
  val Outer = new Breaks

  Outer.breakable {
    for (i <- 1 to 5) {
      Inner.breakable({
        for (j <- 'a' to 'e') {
          if (i == 1 && j == 'c') Inner.break() else println(s"i: $i, j: $j")
          if (i == 2 && j == 'b') Outer.break()
        }
      })
    }
  }

如果第一个if条件被满足,抛出的异常会被Inner.breakable捕获,外层的继续,如果第二个if条件被处罚,控制流交给Outer.breakable,这时两个循环都退出。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 简单排序

    选择排序降低了交换次数,但是比较次数仍然很多,当数据量比较少,或者基本上有序的时候,使用选择排序。 对于其他情况,应该选择插入排序。

    悠扬前奏
  • LintCode-56.两数之和

    你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。

    悠扬前奏
  • Guava-1.9类Enums

    使用Enum.valueOf()来返回指定名称和class的Enum的Optional,如果不存在则返回Absent.

    悠扬前奏
  • 一个简单的C、C++练习题

    给出一串数,找出这样的数,比他们前面的数都大,比它后面的数都小。 要求:输入的数个数要大于3

    ccf19881030
  • POj 1611 The Suspects

    题意:将n个人分组,找出受感染的人有多少,当一个人感染,他所在的那一组均视为受感染。 分析:运用并查集将相关联的人都分到一个集合,然后判断每个人是否和0在同一个...

    用户1624346
  • Nginx反向代理svn服务器提交文件出现500错误

    此问题的出现,有多种可能 而我遇到这个问题的原因是因为 在代理服务器location部分的写法是

    luxixing
  • SpringBoot系列之自定义starter实践教程

    Springboot是有提供了很多starter的,starter翻译过来可以理解为场景启动器,所谓场景启动器配置了自动配置等等对应业务模块的一个工程,有需要时...

    用户1208223
  • HTMLCSSJQUERY知识点分解视频下载地址

    http://pan.baidu.com/s/1geAnUrp ? ?

    用户1730674
  • 如何高效回退到特定层级目录?

    如果层级比较少,那这样勉强还可以接受,但如果层级很深,那可能就会 cd 到你怀疑人生了。

    用户6543014
  • 配置LVS-NAT模式

    三台服务器,一台作为 director,两台作为 real server,director 有一个外网网卡(192.168.0.186) 和一个内网ip(172...

    菲宇

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动