1、支持集合直接作为循环体的条件:

// - - - - 支持集合遍历 - - - -
var arr = Array(10, 20, 30)
var arr2 = List(10, 20, 30)
var arr3 = Set(10, 20, 30)
for (i <- arr) println(i)
for (i <- arr2) println(i)
for (i <- arr3) println(i)

2、循环守卫,支持一些寻找特定条件的循环

// 相当于一个语法糖,缩写了很多东西,不满足IF条件的循环等同于执行了continue
for (i <- 1 to 3 if i != 2) {
println(i)
} // 拓展出来就是 从1重复执行到3,当i不等于2时执行打印i
for (i <- 1 to 3) {
if (i != 2) {
println(i)
}
}

3、对步长的设置

// - - - - 步长设置 - - - -
for (i <- 1 to 100 by 2) {
println(i) // 1 3 5 7 9 .... by设置步长
} for (i <- 1 to 100 by -2) {
println(i) // 如果正向迭代,不可以这样设置负数的步长,迭代将不会跳出来,这样是一个死循环了
} for (i <- 100 to 1 by -4) {
println(i) // 表示反向的循环
} for (i <- 1 to 10 reverse) { // 也可以使用reverse来表示逆向循环
println(i)
} for (i <- 0.1 to 3.14 by 0.2) { // for也可以使用浮点数进行循环,但是会有精度问题,不建议使用
println(i)
}

4、嵌套循环

// 嵌套循环

// Java语法
for (i <- 1 to 10) {
for (j <- 1 to 5) {
println(s"i = ${i}, j = ${j}")
}
}
// Scala语法可缩写至
for(i <- 1 to 10; j <- 1 to 5) {
println(s"i = ${i}, j = ${j}")
} // 乘法表案例
for (row <- 1 to 9; column <- 1 to row) {
print(s"${row} * ${column} = ${row * column}\t")
if (row == column) println()
}

5、引入变量

for {
// 当需要写入多种条件时,可以使用这种展开的条件体
iterator <- 1 to 10
variable = iterator - 3
}
{
println(s"iterator = ${iterator}, variable = ${variable}")
}

6、九层妖塔案例

// 方案1
for(level <- 1 to 9) {
val symbol = 2 * level - 1
val blank = 9 - level
println(" " * blank + "*" * symbol)
} // 方案2
for {
level <- 1 to 9
symbol = 2 * level - 1
blank = 9 - level
} {
println(" " * blank + "*" * symbol)
} // 方案3
for {
symbol <- 1 to 17 by 2
blank = (17 - symbol) / 2
} {
println(" " * blank + "*" * symbol)
}

7、循环的返回

// 循环返回
val result = for(iterator <- 1 to 10) {} // for循环的默认返回值为UNIT // yield 指定一个变量为循环装填的元素
val vector = for(iterator <- 1 to 10) yield iterator // for会返回一个Vector集合容器给vector变量
println(vector) // 打印输出 Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

8、While循环

do while 和 while 和 Java 一致,没有做语法处理,这里跳过省略了

9、循环退出

Scala语法这里不再支持Break和Continue,改用了一个Breakable控制结构体来实现

// Java语法
try {
for (i <- 0 until 5) {
if (i == 3) throw new RuntimeException
println(i)
}
} catch {
case exception: Exception => println(exception) // 打印报错
}
println("after exception...") // Scala 这里就是用Break类的breakable方法把try-catch进行了封装
Breaks.breakable(
for (i <- 0 until 5) {
if (i == 3) Breaks.break()
println(i)
}
) /**
* 可以直接引入Break的所有资源,这样可以省略写法
* import scala.util.control.Breaks._
*/
breakable(
for (i <- 0 until 5) {
if (i == 3) break()
println(i)
}
)

【Scala】02 循环的更多相关文章

  1. scala for循环

    scala for循环功能强大啊,for条件可以写各种表达式 通过一个demo来看一下,这个是一个讲yield关键字的demo:<Scala中的yield> object YieldDem ...

  2. 【scala】循环

    1.while循环 Scala的while循环跟其他语言并没有很大差别. var i = 0; while(i<args.length){ println(i); i+=1; } Scala也有 ...

  3. C博客作业02—循环结构

    0.展示PTA总分(0----2) 截图展示2次题目集:单循环和嵌套循环题目集,排名分数截图. 1.本章学习总结(2分) 1.1 学习内容总结 整理这两周学习主要知识点,并能对每个知识点介绍简单案例或 ...

  4. C语言博客作业02——循环结构

    1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 本周学习了循环结构,在之前学习分支结构的时候就涉及到了循环结构中的for循环,这周的又新学了while和do- ...

  5. JAVA基础针对自己薄弱环节总结02(循环)

    循环 A:水仙花. classShuiXianHua { public static void main(String[] args) { for(int i=101;i<1000;i++) { ...

  6. C博客作业02——循环结构

    0.展示PTA总分 单循环题目集 嵌套循环题目集 1.本章学习总结 1.1学习内容总结 (a)while语句 while(表达式) { 循环体语句: } 执行流程:当表达式的值为"真&quo ...

  7. Scala学习之for 循环和 yield 的例子

    for循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合.Scala中for循环是有返回值的.如果被循环的是Map,返回的就是Map,被循环的是List,返回的就是Lis ...

  8. Spark记录-Scala循环语句

    Scala while循环语句 当给定条件为真时,while循环重复一个语句或一组语句.它在执行循环体之前测试条件状态. 只要给定的条件为真,while循环语句重复执行目标语句. object Dem ...

  9. scala (1) for 循环

    scala if  else 判断 (1)在scala中末尾不需要添加 分号 作为语句的终结符.  val  name = "Leo" (2)  在 scala 中 if else ...

  10. scala学习手记2 - scala中的循环

    先来看一段Java中的循环: for (int i = 1; i < 4; i++) { System.out.print(i + ","); } 毫无疑问,scala可以让 ...

随机推荐

  1. yum源的基本知识

    一.yum源配置 1.本地yum源配置内容 [local]#仓库名称,自定义,担具有唯一性 '唯一性是说在yum.repos.d这个文件夹中只能有一个这个名字的yum仓库' name=local_ce ...

  2. golang interface 和 struct 添加方法的区别

    在 Go 语言中,struct 和 interface 都可以关联方法,但它们的方式不同: 1. struct 添加方法: 结构体(struct)本身不直接包含方法,但可以通过定义一个指向该结构体类型 ...

  3. ts的keyof

    keyof 是 TypeScript 中的一种类型操作符,用于获取一个类型的所有键(属性名)作为联合类型.它的语法如下: type KeysOfType = keyof ObjectType; 其中: ...

  4. sql数据的查询

        数据的查询操作             子查询 联合查询 多表查收等等             基本查询 模糊查询 分组查询 子查询             基本查询语句 查询表结构中所有字段 ...

  5. Task2 -- 关于Lecture3

    Smiling & Weeping ---- 玲珑骰子安红豆, 入骨相思知不知. 1. 学习Git分支管理: Git分支是灵活开发的关键.创建.切换和合并分支是基础操作.使用如下命令: bas ...

  6. Qt 应用程序中自定义鼠标光标

    在 Qt 应用程序中,你可以自定义鼠标光标.你可以使用 `QCursor` 类来设置不同类型的鼠标光标,比如内置样式或者自定义的图片.以下是一些使用示例: 使用内置光标样式 Qt 提供了一些内置的光标 ...

  7. Ceph提供nfs服务

    目录 Ceph提供nfs服务 1. 前期准备 1.1 检查模块 1.2 检查是否有nfs-ganesha集群 2. 创建nfs服务 2.1 ceph提供的nfs的架构 3. nfs导出 3.1 创建c ...

  8. 一款开源、免费、现代化风格的WPF UI控件库 - ModernWpf

    前言 今天大姚给大家分享一款开源(MIT License).免费.现代化风格的WPF UI控件库:ModernWpf. 项目介绍 ModernWpf是一个开源项目,它为 WPF 提供了一组现代化的控件 ...

  9. python基础-列表list [ ]

    列表的定义和操作 列表的特性: 元素数量 支持多个 元素类型 任意 下标索引 支持 重复元素 支持 可修改性 支持 数据有序 是 使用场景 可修改.可重复的 一批数据记录场景 # 定义一个列表list ...

  10. 【论文阅读】IROS2022: Dynamics-Aware Spatiotemporal Occupancy Prediction in Urban Environments

    0.参考与前言 完整题目: Dynamics-Aware Spatiotemporal Occupancy Prediction in Urban Environments 论文链接:https:// ...