【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.rhkb.cn/news/239056.html

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

相关文章

算法第十四天-删除有序数组中的重复项

删除有序数组中的重复项 题目要求 解题思路 双指针 左指针确定不重复值&#xff0c;右指针遍历数组 代码 class Solution:def removeDuplicates(self, nums: List[int]) -> int:left0for right in range(1,len(nums)):if nums[left] ! nums[right]:left 1nums[left] nu…

2024年中国电子学会青少年编程等级考试安排的通知

各有关单位、全体考生: 中国电子学会青少年等级考试&#xff08;以下简称等级考试&#xff09;是中国电子学会为落实《全民科学素质行动规划纲要》&#xff0c;提升青少年电子信息科学素质水平而开展的社会化评价项目。等级考试自2011年启动以来&#xff0c;作为中国电子学会科…

缓存学习实战篇

缓存练习题&#xff08;用户查询操作&#xff09; public List<ShopType> queryAllType() throws JsonProcessingException {//从缓存中查数据String shopTypeJson stringRedisTemplate.opsForValue().get("cache:shopType");//如果缓存命中&#xff0c;if (S…

叉车车载终端定制_基于MT6762安卓核心板的车载终端设备方案

叉车车载终端是一款专为叉车车载场景设计的4英寸Android车载平板电脑。它采用了高能低耗的8核ARM架构处理器和交互开放的Android 12操作系统&#xff0c;算力表现强大。此外&#xff0c;该产品还具备丰富的Wi-Fi-5、4G LTE和蓝牙等通讯功能&#xff0c;可选配外部车载蘑菇天线&…

#{}和${}有什么区别

一、概念 在 MyBatis 中&#xff0c;#{}和${}是两种不同的参数占位符语法&#xff0c;它们在使用方式和处理方式上有一些区别。 #{} 的使用方式&#xff1a; #{} 是预编译的语法&#xff0c;会将参数值作为一个占位符来进行处理。#{} 可以用于任何 SQL 的部分&#xff0c;如查…

一些平时很少用,但关键时刻很有用的华为手机功能

天灾&#xff0c;自古以来就是威不可知亦不可测的东西&#xff0c;但大自然中的很多意外&#xff0c;其实可以做到有迹可循。 地震预警功能 前段时间频繁地震&#xff0c;一个月内先是积石山&#xff0c;而后是日本能登。 这时候&#xff0c;手机上的地震预警功能就是能够帮…

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(5)登录认证

指路&#xff08;1&#xff09;&#xff08;2&#xff09;&#xff08;3&#xff09;&#xff08;4&#xff09;&#x1f447; 黑马程序员JavaWeb开发|案例&#xff1a;tlias智能学习辅助系统&#xff08;1&#xff09;准备工作、部门管理_tlias智能学习辅助系统的需求分析-CS…

力扣hot100 二叉树中的最大路径和 递归

Problem: 124. 二叉树中的最大路径和 文章目录 解题方法复杂度&#x1f496; Code 解题方法 &#x1f468;‍&#x1f3eb; 参考思路 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) &#x1f496; Code /*** Definition for a binary tree no…

教你用通义千问只要五步让千年的兵马俑跳上现代的科目三?

教你用五步让千年的兵马俑跳上现代的舞蹈科目三&#xff1f; 上面这个“科目三”的视频&#xff0c;只用了一张我上月去西安拍的兵马俑照片生成的。 使用通义千问&#xff0c;只要5步就能它舞动起来&#xff0c;跳上现在流行的“科目三”舞蹈。 全民舞王 第1步 打开通义千问…

js 回文串

思路&#xff1a; 判断一个字符串是否为回文字符串的基本思路是比较字符串的正序和倒序是否相同。 两者相同&#xff0c;则该字符串是回文字符串&#xff0c;否则不是。 要实现这一思路&#xff0c;我们可以使用 JavaScript 字符串的一些方法。我是忽略了所有的空格和符号&…

【grpc】利用protobuf实现java或kotlin调用python脚本,含实现过程和全部代码

前言 在一些特殊场景中&#xff0c;我们可能需要使用java或者其他任意语言调用python脚本或sdk等。本文的需求衍生也不例外于此&#xff0c;python端有sdk&#xff0c;但只能在python中调用&#xff0c;于是就有了本文章。 常见的调用方式如jython、python提供http rest接口、…

DC电源模块在物联网设备中的关键作用

BOSHIDA DC电源模块在物联网设备中的关键作用 DC电源模块在物联网设备中发挥着关键作用。物联网设备通常需要稳定可靠的电源供应&#xff0c;以保证设备的正常运行。DC电源模块提供了相应的电压和电流输出&#xff0c;为物联网设备提供所需的电力。 具体来说&#xff0c;DC电…

解决英特尔无线网卡WiFi或者蓝牙突然消失问题

winR&#xff0c;输入“devmgmt.msc”&#xff0c;检查设备管理器中的无线网卡驱动是否安装好。 访问https://www.intel.cn/content/www/cn/zh/download/19351/windows-10-and-windows-11-wi-fi-drivers-for-intel-wireless-adapters.html下载对应系统版本的英特尔无线网卡WiFi…

创始人记|2023「年终总结」暨 WorkfineV6版本发布

大家好&#xff0c;我是Workfine黄坤&#xff0c;很高兴能够再次为大家进行分享。衷心感谢大家一直以来对我们的厚爱和支持。新的一年&#xff0c;祝愿大家财源滚滚&#xff0c;身体健康&#xff0c;阖家幸福。 这是我们创业的第七个年头&#xff0c;进入这一行也有整整十年。…

使用 Apache POI 更新/覆盖 特定的单元格

使用 Apache POI 更新特定的单元格 一. 需求二. 实现三. 效果 一. 需求 将以下表中第4行&#xff0c;第4列的单元格由“张宇”更新为“汤家凤”&#xff0c;并将更行后的结果写入新的Excel文件中&#xff1b; 二. 实现 使用Apache POI&#xff0c;可以精确定位到需要更改的单…

Resize:最近邻插值、双线性插值、双三次插值

Resize&#xff1a;最近邻插值、双线性插值、双三次插值 Opencv resize函数1. 最近邻插值&#xff08;INTER_NEAREST&#xff09;1.1 原理1.2 代码实例1.3 简单的代码复现1.4 特点 2. 双线性插值&#xff08;INTER_LINEAR&#xff09;&#xff08;默认值&#xff09;2.1 原理2.…

【React源码 - Diff算法】

介绍 在React学习中&#xff0c;Diff算法(协调算法)&#xff0c;想必我们并不陌生&#xff0c;简单来说就是一个对比新老节点寻找差异&#xff0c;然后找出最小的一个变化集&#xff0c;最后对这个最小变化集进行最小的DOM操作&#xff0c;本文将从源码来分析在React(17.0.2)中…

聚观早报 |一加Ace 3鸣沙金开售;地平线征程6将发布

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 1月16日消息 一加Ace 3鸣沙金开售 地平线征程6将发布 互动短剧《谍影成双》首曝PV 台积电发布四季度财报 保时捷…

kafka系列(二)

本章承接kafka一内容&#xff0c;文章在本人博客主页都有&#xff0c;可以自行点击浏览。 幂等性 请求执行多次&#xff0c;但执行的结果是一致的。 如果&#xff0c;某个系统是不具备幂等性的&#xff0c;如果用户重复提交了某个表格&#xff0c;就可能会造成不良影响。例如…

第十讲 单片机驱动彩色液晶屏 控制RA8889软件:图像运算

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…