当前位置: 首页 > 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;其…...

中国菜刀,蚁剑,哥斯拉,冰蝎的流量特征区别

中国菜刀、蚁剑、哥斯拉、冰蝎这四种Webshell连接工具的流量特征各有区别&#xff0c;以下是它们之间的主要差异&#xff1a; 中国菜刀&#xff08;CaiDao&#xff09; 流量特征&#xff1a; 请求包&#xff1a; UA头可能伪装为百度、火狐等浏览器的User-Agent。请求体中存在…...

华为OD刷题C卷 - 每日刷题32(执行任务赚积分,计算三叉搜索树的高度)

1、&#xff08;执行任务赚积分&#xff09;&#xff1a; 这段代码是解决“执行任务赚积分”的问题。它提供了一个Java类Main&#xff0c;其中包含main方法和getResult方法&#xff0c;用于计算在有限的时间内&#xff0c;处理任务可以获得的最多积分。 main方法首先读取任务…...

QT系列教程(11) TextEdit实现Qt 文本高亮

文本高亮 对于textedit里录入的部分单词我们可以实现高亮&#xff0c;实现高亮主要依赖于QSyntaxHighlighter。 我们先创建一个Qt Application类&#xff0c;类名MainWindow, 然后新增一个C类&#xff0c;类名为MySyntaxHighlighter。 #ifndef MYSYNTAXHIGHLIGHTER_H #define …...

蓝队-溯源技巧

溯源技巧 大致思想 通常情况下&#xff0c;接到溯源任务时&#xff0c;获得的信息如下 攻击时间 攻击 IP 预警平台 攻击类型 恶意文件 受攻击域名/IP其中攻击 IP、攻击类型、恶意文件、攻击详情是溯源入手的点。 通过攻击类型分析攻击详情的请求包&#xff0c;看有没有攻击者…...

【5】JDK、JRE和JVM的区别与联系

JDK、JRE和JVM的区别与联系 Java是一种广泛使用的编程语言&#xff0c;它的跨平台特性得益于Java虚拟机&#xff08;JVM&#xff09;。然而&#xff0c;在Java的世界里&#xff0c;JDK、JRE和JVM这三个术语常常让人感到困惑。本文将阐述它们各自的功能&#xff0c;以及它们是如…...

【DevOps】Logstash详解:高效日志管理与分析工具

在现代软件开发和运维过程中&#xff0c;日志管理与分析是至关重要的环节。日志可以帮助我们追踪系统行为、诊断问题、优化性能以及确保安全合规。Logstash&#xff0c;作为ELK Stack&#xff08;Elasticsearch、Logstash、Kibana&#xff09;的核心组件之一&#xff0c;是一个…...

Vue3 之 Pinia 核心概念(八)

核心概念 State&#xff1a;这是你的应用程序的状态&#xff0c;是一个响应式的对象。 Getters&#xff1a;类似于 Vuex 中的 getters&#xff0c;它们是基于 state 的计算属性。 Actions&#xff1a;类似于 Vuex 中的 mutations 和 actions&#xff0c;它们用于改变 state。但…...

【办公类-04-03】华为助手导出照片视频分类(根据图片、视频的文件名日期分类导出)

背景需求&#xff1a; 用华为手机助手导出的照片视频&#xff0c;只能将jpg照片&#xff08;exifread读取图片的exif拍摄日期&#xff0c;Png、JPEG、mp4都无法识别到exif信息&#xff09; 【办公类-04-02】华为助手导出照片&#xff08;jpg&#xff09;读取拍摄时间分类导出…...

TVBOX 最新版下载+视频源教程

下载链接 wx 搜索 Geek 前端 发送电视资源进行获取 操作教程...

2024年了,苹果可以通话录音了

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 6月11日凌晨&#xff0c;苹果在WWDC24大会上&#xff0c;密集输出了酝酿多时的AI应用更新。苹果对通话、对话、图…...

怎么查看网站有没有做ssl/2345系统导航

% and_hand.m 手算实现与逻辑%% 清理close allclear,clc%% 定义变量P[0,0,1,1;0,1,0,1] % 输入向量P[ones(1,4);P] % 包含偏置的输入向量d[0,0,0,1] % 期望输出向量% 初始化w…...

沧州网站制作公司/seo优化方案策划书

我想要向您介绍能想像到的开始 GUI 编程的最简单方法&#xff0c;就是使用 Scriptics 的 TK 和 Tkinter 封装器。我们将与 developerWorks 中的 “Python 中的 curses 编程” 提到的 curses 库进行很多比较。除了 curses 实现文本控制台而 TK 实现 GUI 这一差别之外&#xff0c…...

西安集团网站建设/企业文化建设方案

105、从前序和中序遍历构造二叉树 返回层序遍历&#xff1a;[3,9,20,null,null,15,7] 思路&#xff1a;递归 前序遍历&#xff1a;list[:1&#xff09;左闭右开 1 [1:idx1) [idx1:) [ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]中序遍…...

做电影网站 需要进那些群/怎么建立网站的步骤

数据库是大难题。 MySQLRedis &#xff08;中文手册 命令参考&#xff09;Mongodb &#xff08;中文手册&#xff09;nosql文档转载于:https://www.cnblogs.com/can-H/articles/7604421.html...

房地产景区网站建设方案/站长之家素材

2019独角兽企业重金招聘Python工程师标准>>> 一、Linux下安装软件的三种方式 在Linux下安装软件有三种方式&#xff1a;rpm安装&#xff0c;yum安装&#xff0c;源码包安装。接下来&#xff0c;我们对这三种安装方式一一进行讲解。 二、rpm安装 rpm安装类似于window…...

seo快速提高网站转化率/凡科官网免费制作小程序

2019独角兽企业重金招聘Python工程师标准>>> svn代码版本管理1.0开发&#xff0c;做dev1.0的branch此时的目录结构svn://proj/ trunk/ (不负担开发任务) branches/ dev_1.0 (copy from trunk) tags/…...