【Scala】——流程控制

1 if-else 分支控制

让程序有选择的的执行,分支控制有三种:单分支、双分支、多分支

1.1单分支

if (条件表达式) {执行代码块
}

1.2 双分支

if (条件表达式) {执行代码块 1
} else {执行代码块 2
}

1.3 多分支

if (条件表达式1) {执行代码块 1
} else if (条件表达式1) {执行代码块 2
}
......
else{执行代码块 n
}

1.4 if-else 表达式返回值

• Scala 中 if else 表达式其实是有返回值的,具体返回值取决于满足条件的 代码体的最后一行内容。

package com.scala
package chapter04import scala.io.StdInobject TestIfElse {def main(args: Array[String]): Unit = {println("input age")val age = StdIn.readInt()val res: String = if (age < 18) {"童年"} else if (age >= 18 && age < 30) {"中年"} else {"老年"}println(res)}
}

• Scala 中返回值类型不一致,取它们共同的祖先类型。

package com.scala
package chapter04import scala.io.StdInobject TestIfElse {def main(args: Array[String]): Unit = {println("input age")val age = StdIn.readInt()val res: Any = if (age < 18) {"童年"} else if (age >= 18 && age < 30) {"中年"} else {100}println(res)}}

1.5 嵌套分支

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层。 分支外面的分支结构称为外层分支。嵌套分支不要超过 3 层。

if () {if () {} else {}
}

2 for 循环控制

Scala 也为 for 循环这一常见的控制结构提供了非常多的特性,这些 for 循环的特性被称 为 for 推导式或 for 表达式。

2.1 范围数据循环(To)

for(i <- 1 to 3){  print(i + " ") 
}

i 将会从 1-3 循环,前后闭合

2.2 范围数据循环(Until)

for (i <- 1 until 5 ) {println("" + i)
}

这种方式和前面的区别在于 i 是从 1 到 4,即使前闭合后开的范围

2.3 循环守卫

循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环 体内部,为 false 则跳过,类似于 continue。

for (i <- 1 to 3 if i != 2) {print(i + " ")
}

普通写法:

for (i <- 1 to 3){if (i != 2) {print(i + " ")}
}

2.4 循环步长(by)

for (i <- 1 to 10 by 2) {println("i=" + i)
}

by 表示步长
在这里插入图片描述

2.5 嵌套循环

没有关键字,所以范围后一定要加;来隔断逻辑

for (i <- 1 to 3; j <- 1 to 3) {println(" i =" + i + " j = " + j)
}

普通写法

for (i <- 1 to 3) {for (j <- 1 to 3) {println("i =" + i + " j=" + j)}
}

2.6 引入变量

for (i <- 1 to 3; j = 4 - i) {println("i=" + i + " j=" + j)
}

• for 推导式一行中有多个表达式时,所以要加 ; 来隔断逻辑
• 当 for 推导式仅包含单一表达式时使用圆括号,当包含多个表达式时,一般每行一个表达式,并用花括号代替圆括号

for {i <- 1 to 3j = 4 - i
} {println("i=" + i + " j=" + j)
}

普通写法:

for (i <- 1 to 3) {var j = 4 - iprintln("i=" + i + " j=" + j)
}

2.7 循环返回值

val res = for(i <- 1 to 10) yield i
println(res)

将遍历过程中处理的结果返回到一个新 Vector 集合中,使用 yield 关键字。
注意:开发中很少使用。

2.8 倒序打印

for(i <- 1 to 10 reverse){println(i)
}

3 While 和do…While循环结构

3.1 While循环控制

循环变量初始化 
while (循环条件) {  循环体(语句)  循环变量迭代 
}

• 循环条件是返回一个布尔值的表达式
• while 循环是先判断再执行语句
• 与 for 语句不同,while 语句没有返回值,即整个 while 语句的结果是 Unit 类型()
• 因为 while 中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量,而变量需要声明在 while 循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是推荐使用 for 循环。

object TestWhile {def main(args: Array[String]): Unit = {var i = 0while (i < 10) {println(i)i += 1}}
}

3.2 do…While循环控制

循环变量初始化;  
do{ 循环体(语句)循环变量迭代  
} while(循环条件)

• 循环条件是返回一个布尔值的表达式
• do…while 循环是先执行,再判断

object TestWhile {def main(args: Array[String]): Unit = {var i = 0do {println(i)i += 1} while (i < 10)}
}

4 循环中断

Scala 内置控制结构特地去掉了 break 和 continue,是为了更好的适应函数式编程,推荐使用函数式的风格解决break和continue的功能,而不是一个关键字。Scala中使用breakable 控制结构来实现 break 和 continue 功能。

package com.scala
package chapter04import scala.util.control.Breaks
import scala.util.control.Breaks.{break, breakable}object TestBreak {def main(args: Array[String]): Unit = {Breaks.breakable(for (elem <- 1 to 10) {println(elem)if (elem == 5) Breaks.break()})breakable(for (elem <- 1 to 10) {println(elem)if (elem == 5) Breaks.break()})for (elem <- 1 to 10) {if (elem % 2 == 1) {println(elem)} else {println("continue")}}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初学者的基本 Python 面试问题和答案

文章目录 专栏导读1、什么是Python&#xff1f;列出 Python 在技术领域的一些流行应用。2、在目前场景下使用Python语言作为工具有什么好处&#xff1f;3、Python是编译型语言还是解释型语言&#xff1f;4、Python 中的“#”符号有什么作用&#xff1f;5、可变数据类型和不可变…

CMake入门教程【核心篇】设置和使用缓存变量

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 概述设置缓存变量使用缓存变量更改缓存变量完整代码示例实战使用技巧注意事项总结与分析

锂电池制造设备中分布式IO模块优势

在“碳达峰、碳中和”目标推动下&#xff0c;新能源汽车当下发展势头正盛&#xff0c;而纯电动车的核心部件则是&#xff1a;锂电池。动力型锂电池作为新能源汽车核心零部件&#xff0c;其发展与新能源汽车行业息息相关&#xff0c;迎来广阔的市场空间。 为何采用I/O模块&#…

Linux中快速搭建RocketMQ测试环境

必要的文件下载 为什么选择RocketMQ | RocketMQ x86_64位JDK下载0jdk/8u391-b13 rocketmq二进制包下载-rocketmq-all-5.1.4-bin-release.zip 编译好的直接可用的dashboard【rocketmq-dashboard-1.0.0.jar】请在文章顶部下载 dashboard配套的配置文件【application.propert…

ECMAScript6历史-前端开发+ECMAScript+基础语法+入门教程

ECMAScript6详解 ECMAScript 历史 我们首先来看 ECMA 是什么。ECMA&#xff0c;读音类似“埃科妈”&#xff0c;是欧洲计算机制造商协会&#xff08;European Computer Manufacturers Association&#xff09;的简称&#xff0c;是一家国际性会员制度的信息和电信标准组织。19…

AcWing 203. 同余方程(扩展欧几里得算法)

题目链接 203. 同余方程 - AcWing题库高质量的算法题库https://www.acwing.com/problem/content/205/ 来源 《算法竞赛进阶指南》, NOIP2012提高组 题解 本题中的同余方程可以转化为ax by 1的形式&#xff0c;利用扩展欧几里得算法可以求得特解为&#xff0c;则通解为。 代…

网站建设网络设计营销类网站模板

★安装环境要求★ 服务器&#xff1a;Linux / Apache / IIS PHP版本&#xff1a;5.4及5.4以上&#xff0c;完美支持php7.4 MYSQL版本&#xff1a;5.0以上 PS&#xff1a;php版本推荐5.6&#xff0c;mysql推荐使用5.7 ★模板安装步骤★ 1、请将源码包里面的所有文件和文件夹上…

【每日一题】删除子串后的字符串最小长度

文章目录 Tag题目来源解题思路方法一&#xff1a;栈 写在最后 Tag 【栈】【字符串】【2024-01-10】 题目来源 2696. 删除子串后的字符串最小长度 解题思路 方法一&#xff1a;栈 思路 按照题目要求需要移除字符串中的 “AB” 和 “CD” 子字符串&#xff0c;并且移除这两种…

Helix QAC 2023.4 新版支持C++20语言,带来更多性能提升!

Helix QAC 2023.4 新增功能 Helix QAC 2023.4全面支持MISRA C:2023规则&#xff0c;涵盖100%的指南。此版本还加强了对C20语言的支持&#xff0c;改进了数据流分析性能&#xff0c;并在整个产品中增加了多项用户体验改进。 增强的C20支持 此版本新增了对以下语言特性的支持&a…

vscode设置python脚本运行参数

1 添加配置文件 点击到你要配置的python文件&#xff0c;然后右上角点击 运行 &#xff0c;再点击 添加配置 再点击 “Pyhton文件” 选项&#xff08;其实就是在选择 当前的python文件 进行配置&#xff09; 接着就生成了配置文件 lanunch.json 2 参数配置 再上面代码的基础上…

Guava:Cache强大的本地缓存框架

Guava Cache是一款非常优秀的本地缓存框架。 一、 经典配置 Guava Cache 的数据结构跟 JDK1.7 的 ConcurrentHashMap 类似&#xff0c;提供了基于时间、容量、引用三种回收策略&#xff0c;以及自动加载、访问统计等功能。 基本的配置 Testpublic void testLoadingCache() th…

6 - 数据备份与恢复|innobackupex

数据备份与恢复&#xff5c;innobackupex 数据备份与恢复数据备份相关概念物理备份与恢复逻辑备份&#xff08;推荐&#xff09;使用binlog日志文件实现对数据的时时备份‘使用日志 恢复数据 innobackupex 对数据做备份和恢复增量备份与恢复 数据备份与恢复 数据备份相关概念 …

【Docker】Docker基础

文章目录 安装使用帮助启动命令镜像命令容器命令 安装 # 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine # 设置存储库 sudo yum install -y yum-utils …

关于git使用的tips

前言 这里是一些git指令使用的tips&#xff0c;如果你作为初学者的话&#xff0c;我认为它将对你有所帮助。 常见指令 常见问题处理 1、使用git clone下载【huggingface.co】资源超时或无法请求问题 绝大多数情况是网络问题&#xff0c;首先如果是比较大的资源&#xff0c;你需…

数据库:如何取消mysql的密码

因为调试MySQL数据接口&#xff0c;总是需要输入密码很烦&#xff0c;所以决定取消mysql的root密码&#xff0c; 网上推荐的有两种方法&#xff1a; 1、mysql命令 SET PASSWORD FOR rootlocalhostPASSWORD(); 2、运行 mysqladmin 命令 mysqladmin -u root -p password …

vue设置height:100vh导致页面超出屏幕可以上下滑动

刚开始设置的height:100vh&#xff0c;就会出现如图的效果&#xff0c;会出现上下滚动 <template><view class"container">......</view> </template><style lang"scss">.container {height: 100vh;} </style> 解决方…

精确掌控并发:分布式环境下并发流量控制的设计与实现(一)

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;10&#xff09;篇。 本篇主要讲清楚常用的并发流量控制方案&#xff0c;包括固定窗口、滑动窗口、漏桶、令牌桶、分布式消息中间件等&#xff0c;以及各种方案在支付系统不同场景下的应用。 在非支付场景&a…

故事机手机平板等智能硬件DVT阶段可靠性测试方法

DVT是什么 DVT是设计样品验证测试评审阶段&#xff0c;这个阶段要进行全面的&#xff0c;客观的测试&#xff0c; 主要测试项目包括&#xff1a;功能测试&#xff0c;安规测试&#xff0c;性能测试&#xff0c;合规测试&#xff08;兼容性&#xff09;&#xff0c;机械测试&am…

QT上位机开发(树形控件在地图软件中的应用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 树形控件还是非常有用的&#xff0c;比如在选择文件的时候、选择目录的时候、以及选择同类型数据中某一个特定选项的时候。当然&#xff0c;对于ca…

JVM工作原理与实战(十一):双亲委派机制

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、双亲委派机制 1.双亲委派机制详解 2.父类加载器 3.双亲委派机制的主要作用 二、双亲委派机制常见问题 总结 前言 ​JVM作为Java程序的运行环境&#xff0c;其负责解释和执行字…