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. 类的阐述 package(包)

    类的阐述 同一个文件中可以定义很多类 编译后,每个类都会生成独立的.class文件 一个类中,只能有一个主函数,每个类都可以有自己的主函数 public修饰的类称为公开类,要求类名必须与文件名称完全相 ...

  2. 推荐一款免费的终端工具-Windterm

    Windterm 提到SSH终端工具,大家一定会想到putty.xshell.MobaXterm这些产品.但是当我使用Windterm后,我彻底改变了我对之前使用SSH终端工具的认知,其强大的能力,彻 ...

  3. go.mod file not found in current directory or any parent directory; see 'go help modules' (exit status 1)

    go.mod file not found in current directory or any parent directory; see 'go help modules' (exit stat ...

  4. C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 文件夹体积很大

    现象:大量调用.p12证书时,C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 文件夹变得越来越大. 调用代码: X509Certificate2 x50 ...

  5. Tomcat问题修复系列之后台缓存不足

    系统运维时,在tomcat窗口发现一个警告 后台缓存收回进程无法释放上下文的缓存的10%-请考虑增加缓存的最大大小.在逐出之后,缓存中约保留XXX KB的数据. 无法将位于[/WEB-INF/view ...

  6. 增补博客 第五篇 python 电子算盘

    [题目描述]设计一个电子算盘.要求绘制电子算盘界面,设计并实现打珠算过程(界面参考如下图示).界面右侧要求以图形绘制的方式绘制自画像,注意不能是图像文件显示的形式. 图 电子算盘参考界面示意 [练习要 ...

  7. WPF/C#:如何将数据分组显示

    WPF Samples中的示例 在WPF Samples中有一个关于Grouping的Demo. 该Demo结构如下: MainWindow.xaml如下: <Window x:Class=&q ...

  8. notonlysuccess大神的线段树完全版

    在大神的网站进不去的时候可以过来看看,另外道客巴巴有个排版比较好的文档,外观派可以去看看http://www.doc88.com/p-2728103209174.html 很早前写的那篇线段树专辑至今 ...

  9. nginx 信号量

    nginx支持的信号量 TERM, INT fast shutdown QUIT graceful shutdown HUP changing configuration, keeping up wi ...

  10. 使用EF 连接 数据库 SQLserver、MySql 实现 CodeFirst

    1.新建项目,下载Nuget安装包 创建项目需要注意几点,如果是基于 .net framework 的项目 需要选择 相应版本的 EF, 如果是跨平台则选择EF Core版本. 我这里选择的是 .ne ...