【Scala】02 循环
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 循环的更多相关文章
- scala for循环
scala for循环功能强大啊,for条件可以写各种表达式 通过一个demo来看一下,这个是一个讲yield关键字的demo:<Scala中的yield> object YieldDem ...
- 【scala】循环
1.while循环 Scala的while循环跟其他语言并没有很大差别. var i = 0; while(i<args.length){ println(i); i+=1; } Scala也有 ...
- C博客作业02—循环结构
0.展示PTA总分(0----2) 截图展示2次题目集:单循环和嵌套循环题目集,排名分数截图. 1.本章学习总结(2分) 1.1 学习内容总结 整理这两周学习主要知识点,并能对每个知识点介绍简单案例或 ...
- C语言博客作业02——循环结构
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 本周学习了循环结构,在之前学习分支结构的时候就涉及到了循环结构中的for循环,这周的又新学了while和do- ...
- JAVA基础针对自己薄弱环节总结02(循环)
循环 A:水仙花. classShuiXianHua { public static void main(String[] args) { for(int i=101;i<1000;i++) { ...
- C博客作业02——循环结构
0.展示PTA总分 单循环题目集 嵌套循环题目集 1.本章学习总结 1.1学习内容总结 (a)while语句 while(表达式) { 循环体语句: } 执行流程:当表达式的值为"真&quo ...
- Scala学习之for 循环和 yield 的例子
for循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合.Scala中for循环是有返回值的.如果被循环的是Map,返回的就是Map,被循环的是List,返回的就是Lis ...
- Spark记录-Scala循环语句
Scala while循环语句 当给定条件为真时,while循环重复一个语句或一组语句.它在执行循环体之前测试条件状态. 只要给定的条件为真,while循环语句重复执行目标语句. object Dem ...
- scala (1) for 循环
scala if else 判断 (1)在scala中末尾不需要添加 分号 作为语句的终结符. val name = "Leo" (2) 在 scala 中 if else ...
- scala学习手记2 - scala中的循环
先来看一段Java中的循环: for (int i = 1; i < 4; i++) { System.out.print(i + ","); } 毫无疑问,scala可以让 ...
随机推荐
- [SWPUCTF 2021 新生赛]easy_md5
打开靶场可以看到一串代码,进行代码审计我们可以知道这个网页包含了一个叫flag2.php的文件,如果想要得到这个文件就得进行GET传参和POST传参. 并且这里用到一个MD5绕过,传参的值不能相等,但 ...
- 手把手教你免费用Flashduty做消息通知
为什么需要消息通知? 如果有重要的情况发生,希望能通过各种媒介通知我们.可以举几个例子: 家里燃气费没有了,希望能有短信或者app通知 api频繁500报错,希望及时感知,及时修复 公司网站是http ...
- MapStruct - 注解汇总
@Mapper @Mapper 将接口或抽象类标记为映射器,并自动生成映射实现类代码. public @interface Mapper { // 引入其他其他映射器 Class<?>[] ...
- 【大道至简】NetCore3.1快速开发框架一:介绍
新的一年开始,祝大家2020新年快乐! 去年开源了一个基于NetCore2.2的框架,好多好基友还是比较喜欢的 github地址:https://github.com/feiyit/FytSoaCms ...
- 订单推送设计思路-基于支付ID而不是订单号来推送
订单推送设计思路-基于支付ID而不是订单号来推送 方案:不是基于订单号来核销和分账的,抖音是基于每一笔抖音支付来做订单推送,核销和分账现象:这样会在抖音的订单中心中会出现很多条订单推送的记录. 抖音A ...
- Java编码规范-字符串与Integer的比较,BigDecimal非空参数
Java编码规范-字符串与Integer的比较,BigDecimal非空参数 package com.example.core.mydemo; import java.math.BigDecimal; ...
- tampermonkey脚本 百度搜索屏蔽CSDN
// ==UserScript==// @name 屏蔽CSDN// @namespace http://tampermonkey.net/// @version 20 ...
- 终端读取iOS项目所有设置参数(版本号、应用名等)
在某些场景下(比如自动化打包等),我们需要从终端来读取到iOS项目的数据,首先先上代码 xcodebuild -showBuildSettings -target 项目target 但有时候我们需要将 ...
- R语言遍历文件夹求取其中所有栅格文件的平均值
本文介绍基于R语言中的raster包,遍历读取多个文件夹下的多张栅格遥感影像,分别批量对每一个文件夹中的多个栅格图像计算平均值,并将所得各个结果栅格分别加以保存的方法. 其中,本文是用R语言来 ...
- 【论文阅读】Trajectory-guided Control Prediction for End-to-end Autonomous Driving: A Simple yet Strong Baseline
参考与前言 Summary: leaderboard 现存第一名 TCP,非常simple的设置 取得了很好的效果 论文链接:Trajectory-guided Control Prediction ...