当前位置: 首页 > news >正文

Scala运算符及流程控制

Scala运算符及流程控制


文章目录

  • Scala运算符及流程控制
    • 写在前面
    • 运算符
      • 算数运算符
      • 关系运算符
      • 赋值运算符
      • 逻辑运算符
      • 位运算符
      • 运算符本质
    • 流程控制
      • 分支控制
        • 单分支
        • 双分支
        • 多分支
      • 循环控制
        • for循环
        • while循环
        • 循环中断
        • 嵌套循环


写在前面

  • 操作系统:Windows10
  • JDK版本:jdk1.8
  • Maven版本:Maven-3.5.4
  • Scala版本:Scala-2.12.11
  • IDE工具:IntelliJ IDEA 2019.2.3

scala运算符的使用和Java运算符的使用基本相同,只有个别细节上不同。

运算符

算数运算符

我们先定义变量 A 为 10,B 为 20,那么+-*/四个算术运算符的结果如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jWYfMhMk-1676817219096)(1.png)]

关系运算符

我们先定义变量 A 为 10,B 为 20,那么==!=><>=<=六个关系运算符的结果如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CjiDJsmX-1676817219097)(2.png)]

赋值运算符

已知有变量 A,B,C,那么==+=-=*=/=%=<<=&=^=^|=一共11个赋值运算符的结果如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZIF7nwCw-1676817219098)(3.png)]

逻辑运算符

我们先定义变量 A 为 1,B 为 0,那么&&||!三个运算符的结果如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJNCSyIs-1676817219098)(4.png)]

位运算符

我们先定义变量 A = 60; 及 B = 13; 同时两个变量对应的二进制为:

A = 0011 1100
B = 0000 1101

那么,各种使用位运算符号最终的运算结果如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hyDLUZTO-1676817219099)(5.png)]

运算符本质

在Scala中其实是没有运算符的,所有运算符都是**方法**。

  • scala是完全面向对象的语言,所以数字其实也是对象

  • 当调用对象的方法时,点.可以省略

  • 如果函数参数只有一个,或者没有参数,()可以省略

举例如下所示:.+()表示方法

object ScalaOper {def main(args: Array[String]): Unit = {val i : Int = 10val j : Int = i.+(10)val k : Int = j +(20)val m : Int = k + 30println(m)}
}

流程控制

Scala程序代码和所有编程语言代码一样,都会有特定的执行流程顺序,默认情况下是顺序执行,上一条逻辑执行完成后才会执行下一条逻辑,执行期间也可以根据某些条件执行不同的分支逻辑代码。

分支控制

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

单分支

IF…ELSE 语句是通过一条或多条语句的执行结果(true或者false)来决定执行的代码块

if(布尔表达式) {// 如果布尔表达式为 true 则执行该语句块
}

如果布尔表达式为 true 则执行大括号内的语句块,否则跳过大括号内的语句块,执行大括号之后的语句块。

object ScalaBranch {def main(args: Array[String]): Unit = {val b = trueif (b) {println("true")}}
}
双分支
if(布尔表达式) {// 如果布尔表达式为 true 则执行该语句块
} else {// 如果布尔表达式为 false 则执行该语句块
}

如果布尔表达式为 true 则执行接着的大括号内的语句块,否则执行else后的大括号内的语句块。

object ScalaBranch {def main(args: Array[String]): Unit = {val b = trueif (b) {println("true")} else {println("false")}}
}
多分支
if(布尔表达式1) {// 如果布尔表达式1为 true,则执行该语句块
} else if ( 布尔表达式2 ) {// 如果布尔表达式2为 true,则执行该语句块
}...
} else {// 上面条件都不满足的场合,则执行该语句块
}

实现一个小功能:输入年龄,如果年龄小于18岁,则输出“童年”。如果年龄大于等于18且小于等于30,则输出“青年”,如果年龄大于30小于等于50,则输出”中年”,否则,输出“老年”。

object ScalaBranch {def main(args: Array[String]): Unit = {val age = 30if ( age < 18 ) {println("童年")} else if ( age <= 30 ) {println("青年")} else if ( age <= 50 ) {println("中年")} else {println("老年")}}
}

实际上,Scala中的表达式都是有返回值的,所以上面的小功能还有其他的实现方式

object ScalaBranch {def main(args: Array[String]): Unit = {val age = 30val result = if ( age < 18 ) {"童年"} else if ( age <= 30 ) {"青年"} else if ( age <= 50 ) {"中年"} else {"老年"}println(result)}
}

循环控制

有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了更为复杂执行路径的多种控制结构。循环语句允许我们多次执行一个语句或语句组

Scala语言提供了以下几种循环类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ABfdoDwT-1676817219100)(6.png)]

for循环
  • 基本语法
for (循环变量 <- 数据集) {循环体
}

这里的数据集可以是任意类型的数据集合,如字符串,集合,数组等,这里我们还没有讲到集合,数组语法,请大家不要着急,先能演示例子,后面咱们详细讲。

object ScalaLoop {def main(args: Array[String]): Unit = {for (i <- Range(1,7)) { // 范围集合println("i = " + i)}for ( i <- 1 to 7) { // 包含5println("i = " + i)}for ( i <- 1 until 7) { // 不包含5println("i = " + i)}}
}
  • 循环守卫

循环时可以增加条件来决定是否继续循环体的执行,这里的判断条件我们称之为循环守卫

object ScalaLoop {def main(args: Array[String]): Unit = {for (i <- Range(1,7) if i != 4) {println("i = " + i)}}
}
  • 循环步长

Scala的集合也可以设定循环的增长幅度,也就是所谓的步长step

object ScalaLoop {def main(args: Array[String]): Unit = {for (i <- Range(1,7,2)) {println("i = " + i)}for (i <- 1 to 7 by 2) {println("i = " + i)}}
}
  • 循环嵌套
object ScalaLoop {def main(args: Array[String]): Unit = {for (i <- Range(1,7); j <- Range(1,6)) {println("i = " + i + ",j = " + j)}for ( i <- Range(1,7) ) {for ( j <- Range(1,6)) {println("i = " + i + ",j = " + j)}}}
}

Note:请好好体会上面两种嵌套方式的区别。

  • 引入变量

引入j变量

object ScalaLoop {def main(args: Array[String]): Unit = {for (i <- Range(1,7); j = i - 1) {println("j = " + j )}}
}
  • 循环返回值

Scala所有的表达式都是有返回值的。但是这里的返回值并不一定都是有值的哟。

如果希望for循环表达式的返回值有具体的值,需要使用关键字yield

object ScalaLoop {def main(args: Array[String]): Unit = {val result = for (i <- Range(1,7) ) yield {i * 2}println(result)}
}
while循环
  • 基本语法**

当循环条件表达式返回值为true时,执行循环体代码

while( 循环条件表达式 ) {循环体
}

一种特殊的while循环就是,先执行循环体,再判断循环条件是否成立

do {循环体
} while ( 循环条件表达式 )
  • while循环
object ScalaLoop {def main(args: Array[String]): Unit = {var i = 0while (i < 7) {println(i)i += 1}}
}
  • do...while循环
object ScalaLoop {def main(args: Array[String]): Unit = {var i = 7do {println(i)} while (i < 7)}
}
循环中断

scala是完全面向对象的语言,所以无法使用break,continue关键字这样的方式来中断,或继续循环逻辑,而是采用了函数式编程的方式代替了循环语法中的break和continue(scala.util.control.Breaks.break

object ScalaLoop {def main(args: Array[String]): Unit = {scala.util.control.Breaks.breakable {for (i <- 1 to 5) {if (i == 3) {scala.util.control.Breaks.break}println(i)}}}
}
嵌套循环

循环中有循环,就是嵌套循环。

全文结束!

相关文章:

Scala运算符及流程控制

Scala运算符及流程控制 文章目录 Scala运算符及流程控制写在前面运算符算数运算符关系运算符赋值运算符逻辑运算符位运算符运算符本质 流程控制分支控制单分支双分支多分支 循环控制for循环while循环循环中断嵌套循环 写在前面 操作系统&#xff1a;Windows10JDK版本&#xff…...

Github 2024-06-10开源项目周报 Top15

根据Github Trendings的统计,本周(2024-06-10统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目8Jupyter Notebook项目2Go项目2C++项目1Shell项目1Lua项目1JavaScript项目1MDX项目1C项目1HTML项目1Python - 100天从新手到大师 创建…...

9. 文本三剑客之awk

文章目录 9.1 什么是awk9.2 awk命令格式9.3 awk执行流程9.4 行与列9.4.1 取行9.4.2 取列 9.1 什么是awk 虽然sed编辑器是非常方便自动修改文本文件的工具&#xff0c;但其也有自身的限制。通常你需要一个用来处理文件中的数据的更高级工具&#xff0c;它能提供一个类编程环境来…...

在vscode中调试,命令行出现错误信息ModuleNotFoundError: No module named ‘imp‘

在vscode中调试&#xff0c;命令行出现错误信息ModuleNotFoundError: No module named ‘imp’ 报错原因 VSCode的python扩展会使用debugpy库实现调试功能。在涉及qt组件加载时&#xff0c;debugpy的qt_loaders.py会尝试加载imp库。而在python3.12及以后的版本中&#xff0c;…...

SAP实施方法论的变化

SAP 的实施方法论 ASAP&#xff0c;在SAP进入 S/4 HANA时&#xff0c;不知不觉改了意思。 原来叫Accelerate SAP&#xff0c;现在叫Activate SAP &#xff0c;毕竟存量SAP太多&#xff0c;大部分用户并非象十多年前一样新实施SAP&#xff0c;而是在老的Sap R/3 &#xff0c;MyS…...

phpstudy的安装dvwa

phpstudy安装dvwa 1. 下载phpstudy Windows版phpstudy下载 - 小皮面板(phpstudy) (xp.cn) 2. 搭建dvwa靶场 下载地址&#xff1a;https://github.com/ethicalhack3r/DVWA/archive/master.zip 将其放入www文件夹中 3. 修改配置文件 将\DVWA-master\config中config.inc.php…...

费曼的博士学位论文及下载

原始链接 PDF影印版下载 以前看《费曼物理学讲义》觉得最小作用原理部分讲得非常多、而且比较炫。现在知道原因了。 The principle of least action in quantum mechanics Richard Phillips Feynman(Princeton U. )May, 1942 74 pages Supervisor: John Archibald Wheeler…...

k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装

文章目录 前言VPA简介简单理解详细解释VPA的优缺点优点1.自动化资源管理2.资源优化3.性能和稳定性提升5.成本节约6.集成性和灵活性 缺点1.Pod 重启影响可用性2.与 HPA 冲突3.资源监控和推荐滞后&#xff1a;4.实现复杂度&#xff1a; 核心概念Resource Requests 和 Limits自动调…...

【OS】相关知识点收集

1 页面置换 页面置换算法是在计算机内存管理中用于决定哪些页面应该被替换出内存&#xff0c;以便为新的页面腾出空间的策略。以下是关于页面置换算法的详细回答&#xff0c;参考了多篇相关文章的信息。 1. 页面置换算法概述 页面置换算法主要应用于在存储体系当中&#xff…...

如何开发高效服务(C++ )

在 C 开发高效服务器时&#xff0c;常用的开发模式和设计模式能够帮助你构建高效、可扩展和可维护的服务器。以下是一些常见的模式和设计模式&#xff1a; 1. 并发和并行编程模型 1.1 Reactor 模式 Reactor 模式是一种事件驱动设计模式&#xff0c;广泛用于高性能服务器编程…...

STM32实现多级菜单界面显示

1、main函数中&#xff0c;while循环之前 MenuStruct menu[30] //定义多级菜单结构体数组{{0,0,0,1,show0}, //第一个元素表示索引号&#xff0c;第二个元素表示该按键按下后要返回的界面&#xff0c;第三个元素表示该按键按下后要切换的菜单条目界面&#xff0c;第四个元素…...

Qt事件处理和传递流程

事件系统的概述 事件的类型 Qt 支持多种事件类型&#xff0c;每种类型代表不同的用户交互或系统事件。常见的事件类型包括&#xff1a; 输入事件&#xff1a;如鼠标事件&#xff08;QMouseEvent&#xff09;、键盘事件&#xff08;QKeyEvent&#xff09;。窗口事件&#xff…...

基于STM32移植U8g2图形库——OLED显示(HAL库)

文章目录 一、U8g2简介1、特点2、U8g2的使用步骤 二、I2C相关介绍1、I2C的基本原理2、I2C的时序协议 三、OLED屏的工作原理四、汉字点阵显示原理五、建立STM32CubeMX工程六、U8g2移植1、U8g2源码2、移植过程 七、代码编写1、参考博主实现的U82G的demo例程&#xff08;1&#xf…...

C语言概述与历史

引言 C语言是一门历史悠久且影响深远的编程语言。它不仅为后继的许多编程语言奠定了基础&#xff0c;同时因其高效性和灵活性在系统编程和嵌入式开发领域得到了广泛应用。本篇文章将全面介绍C语言的起源与发展、设计目标与理念&#xff0c;以及C语言的标准演化历程&#xff0c;…...

钉钉Stream模式推送程序环境部署

python3.10版本需要openssl1.1.1及以上版本 参考链接&#xff1a;https://blog.csdn.net/weixin_42806458/article/details/110678710 wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz unzip openssl-1.1.1q.tar.gz cd openssl-1.1.1q ./config --prefix/usr/loc…...

c# 二维图形绘制实践

1.等边三角形 1.1 概述 1.2 代码 using System; using System.Drawing; using System.Windows.Forms;public partial class TriangleForm : Form {public TriangleForm(){//InitializeComponent();// 确保窗体大小足够大&#xff0c;以容纳三角形 this.ClientSize new Siz…...

Nvidia TensorRT系列01-TensorRT的功能1

Nvidia TensorRT系列01-TensorRT的功能1 B站&#xff1a;肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) 博客&#xff1a;肆十二-CSDN博客 问答&#xff1a;(10 封私信 / 72 条消息) 肆十二 - 知乎 (zhihu.com) C和Python API TensorRT的API同时支持C和Pyth…...

Vatee万腾平台:创新科技,助力企业腾飞

在全球化竞争日益激烈的今天&#xff0c;企业如何借助科技力量实现转型升级&#xff0c;已成为摆在众多企业家面前的重大课题。Vatee万腾平台凭借其卓越的创新科技和专业的服务能力&#xff0c;成为众多企业实现腾飞的得力助手。 一、创新科技&#xff0c;引领企业前行 Vatee万…...

搭建k8s集群报错unknown command “\u00a0“ for “kubeadm init“

搭建k8s报错unknown command “\u00a0” for “kubeadm init” 网上搜了一下&#xff0c;是因为复制过来的命令前面包含了空格&#xff0c;将复制的命令放到idea可以清楚看到几个命令前面有空格&#xff0c;删除掉就好了&#xff0c;记录一下...

【数据结构】三路快速排序

1. 简介 传统快速排序用的是双路快速排序&#xff0c;即将大于基准值的部分放到基准值右侧&#xff0c;小于基准值的部分放到基准值左侧&#xff0c;但是这种算法面对过多的重复数据的数组&#xff0c;时间复杂度会增多&#xff0c;于是就有了三路快速排序的思想&#xff0c;其…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...