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. xv6 文件系统

    文件系统 公众号:Rand_cs 本文继续来看 x v 6 xv6 xv6 的文件系统部分, x v 6 xv6 xv6 将文件系统的设计分为 7 层: 磁 盘 → 缓 存 区 → 日 志 → i n ...

  2. Flashcat与出行科技企业一起实践多云可观测

    当前架构 某出行科技企业从单个公有云往多云转型,依托于国内领先的公有云提供商,采用多云架构,在可用性.弹性.成本.供应商依赖方面,拥有了显著的优势. 相应的,多云架构也给技术团队带来了一定的复杂度和技 ...

  3. work13

    任务要求: 1.建立一个企鹅类,企鹅有名字(可以自由添加属性)2.把多个企鹅的信息添加到集合中3.查看企鹅的数量4.遍历输出所有企鹅的信息5.删除集合中索引值是2的企鹅的元素 任务描述: 定义一个老鼠 ...

  4. 一种复习flex布局的方法

    方法论 flex布局有多个属性,时常会忘记.我们复习的话,单纯看一些博客文章,不能直观的理解,也比较枯燥. 因此如果有一种用写代码闯关的方式来复习(学习)flex布局,那也许会更有意思. FLEXBO ...

  5. leetcode-3-无重复字符的最长子串-javascript

    题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc ...

  6. 算法金 | 一个强大的算法模型,GP !!

    大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 高斯过程算法是一种强大的非参数机器学习方法,广泛应用于回归.分类和优化等任务中.其核心 ...

  7. Java中的ThreadLocal和 InheritableThreadLocal

    Java中的ThreadLocal和 InheritableThreadLocal package com.example.core.mydemo.java; /** * output * Threa ...

  8. apollo配置json

    #json串原文[{"username":"李小刚","sex":"男"},{"username": ...

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

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

  10. python 二次封装logging,打印日志文件名正确,且正确写入/结合pytest执行,日志不输出的问题

    基于之前日志问题,二次封装日志后,导致日志输出的文件名不对,取到的文件一直都是当前二次封装的log的文件名,基于这个问题,做了优化,详细看 https://www.cnblogs.com/cuitan ...