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. [SWPUCTF 2021 新生赛]easy_md5

    打开靶场可以看到一串代码,进行代码审计我们可以知道这个网页包含了一个叫flag2.php的文件,如果想要得到这个文件就得进行GET传参和POST传参. 并且这里用到一个MD5绕过,传参的值不能相等,但 ...

  2. 手把手教你免费用Flashduty做消息通知

    为什么需要消息通知? 如果有重要的情况发生,希望能通过各种媒介通知我们.可以举几个例子: 家里燃气费没有了,希望能有短信或者app通知 api频繁500报错,希望及时感知,及时修复 公司网站是http ...

  3. MapStruct - 注解汇总

    @Mapper @Mapper 将接口或抽象类标记为映射器,并自动生成映射实现类代码. public @interface Mapper { // 引入其他其他映射器 Class<?>[] ...

  4. 【大道至简】NetCore3.1快速开发框架一:介绍

    新的一年开始,祝大家2020新年快乐! 去年开源了一个基于NetCore2.2的框架,好多好基友还是比较喜欢的 github地址:https://github.com/feiyit/FytSoaCms ...

  5. 订单推送设计思路-基于支付ID而不是订单号来推送

    订单推送设计思路-基于支付ID而不是订单号来推送 方案:不是基于订单号来核销和分账的,抖音是基于每一笔抖音支付来做订单推送,核销和分账现象:这样会在抖音的订单中心中会出现很多条订单推送的记录. 抖音A ...

  6. Java编码规范-字符串与Integer的比较,BigDecimal非空参数

    Java编码规范-字符串与Integer的比较,BigDecimal非空参数 package com.example.core.mydemo; import java.math.BigDecimal; ...

  7. tampermonkey脚本 百度搜索屏蔽CSDN

    // ==UserScript==// @name         屏蔽CSDN// @namespace    http://tampermonkey.net/// @version      20 ...

  8. 终端读取iOS项目所有设置参数(版本号、应用名等)

    在某些场景下(比如自动化打包等),我们需要从终端来读取到iOS项目的数据,首先先上代码 xcodebuild -showBuildSettings -target 项目target 但有时候我们需要将 ...

  9. R语言遍历文件夹求取其中所有栅格文件的平均值

      本文介绍基于R语言中的raster包,遍历读取多个文件夹下的多张栅格遥感影像,分别批量对每一个文件夹中的多个栅格图像计算平均值,并将所得各个结果栅格分别加以保存的方法.   其中,本文是用R语言来 ...

  10. 【论文阅读】Trajectory-guided Control Prediction for End-to-end Autonomous Driving: A Simple yet Strong Baseline

    参考与前言 Summary: leaderboard 现存第一名 TCP,非常simple的设置 取得了很好的效果 论文链接:Trajectory-guided Control Prediction ...