第 3 章 运算符Scala 运算符的使用

第 3 章 运算符Scala 运算符的使用和 Java 运算符的使用基本相同,只有个别细节上不同。算术运算符基本语法运算符运算范例结果+正号+33-负号b=4; -b-4+加5+510-减6-42*乘3*412/除5/51%取模(取余)7%52+字符串相加"He"+"llo""Hello"对于除号"/",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。对一个数取模 a%b,和 Java 的取模规则一样。案例实操object TestArithmetic {def main(args: ArrayString): Unit = {//(1)对于除号"/",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。var r1: Int = 10 / 3 // 3 println("r1=" + r1)var r2: Double = 10 / 3 // 3.0 println("r2=" + r2)var r3: Double = 10.0 / 3 // 3.3333 println("r3=" + r3)println("r3=" + r3.formatted("%.2f")) // 含义:保留小数点 2位,使用四舍五入关系运算符(比较运算符)基本语法运算符运算范例结果==相等于4==3false!=不等于4!=3true<小于4<3false>大于4>3true<=小于等于4<=3false>=大于等于4>=3true案例实操需求 1:object TestRelation {def main(args: ArrayString): Unit = {// 测试:>、>=、<=、<、==、!= var a: Int = 2var b: Int = 1println(a > b)// true println(a >= b)// true println(a <= b)// false println(a < b)// falseprintln("a==b" + (a == b))// false println(a != b)// true}}需求 2:Java 和Scala 中关于==的区别Java:==比较两个变量本身的值,即两个对象在内存中的首地址; equals 比较字符串中所包含的内容是否相同。public static void main(String\[\] args) {String s1 = "abc";String s2 = new String("abc"); System.out.println(s1 == s2);System.out.println(s1.equals(s2));}输出结果:falsetrueScala:==更加类似于 Java 中的 equals,参照 jd 工具def main(args: ArrayString): Unit = { val s1 = "abc"val s2 = new String("abc")println(s1 == s2) println(s1.eq(s2))}输出结果:truefalse逻辑运算符基本语法用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个 Boolean 值。假定:变量A 为 true,B 为 false案例实操object TestLogic {def main(args: ArrayString): Unit = {// 测试:&&、||、!var a = truevar b = falseprintln("a&&b=" + (a && b))// a&&b=false println("a||b=" + (a || b))// a||b=true println("!(a&&b)=" + (!(a && b))) // !(a&&b)=true}} 扩展避免逻辑与空指针异常isNotEmpty(String s){//如果按位与,s 为空,会发生空指针return s!=null && !"".equals(s.trim());}赋值运算符基本语法赋值运算符就是将某个运算后的值,赋给指定的变量。运算符描述实例=简单的赋值运算符,将一个表达式的值赋给一个左值C = A + B 将 A + B 表达式结果赋值 给 C+=相加后再赋值C += A 等 于 C = C + A-=相减后再赋值C -= A 等 于 C = C - A*=相乘后再赋值C *= A 等 于 C = C * A/=相除后再赋值C /= A 等 于 C = C / A%=求余后再赋值C %= A 等 于 C = C % A<<=左移后赋值C <<= 2 等 于 C = C << 2>>=右移后赋值C >>= 2 等 于 C = C >> 2&=按位与后赋值C &= 2等 于 C = C & 2^=按位异或后赋值C ^= 2等 于 C = C ^ 2|=按位或后赋值C |= 2等 于 C = C | 2注意:Scala 中没有++、--操作符,可以通过+=、-=来实现同样的效果;案例实操object TestAssignment {def main(args: ArrayString): Unit = { var r1 = 10r1 += 1 // 没有++ r1 -= 2 // 没有--}}位运算符基本语法下表中变量 a 为 60,b 为 13。运算符描述实例&按位与运算符(a & b) 输出结果 12 ,二进制解释: 0000 1100|按位或运算符(a | b) 输出结果 61 ,二进制解释: 0011 1101^按位异或运算符(a ^ b) 输出结果 49 ,二进制解释: 0011 0001~按位取反运算符(~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。<<左移动运算符a << 2 输出结果 240 ,二进制解释: 0011 0000>>右移动运算符a >> 2 输出结果 15 ,二进制解释: 0000 1111>>>无符号右移a >>>2 输出结果 15, 二进制解释: 0000 1111案例实操object TestPosition {def main(args: ArrayString): Unit = {// 测试:1000 << 1 =>10000var n1 :Int =8n1 = n1 << 1println(n1)}}Scala 运算符本质在 Scala 中其实是没有运算符的,所有运算符都是方法。当调用对象的方法时,点.可以省略如果函数参数只有一个,或者没有参数,()可以省略object TestOpt {def main(args: ArrayString): Unit = {// 标准的加法运算val i:Int = 1.+(1)// (1)当调用对象的方法时,.可以省略val j:Int = 1 + (1)// (2)如果函数参数只有一个,或者没有参数,()可以省略val k:Int = 1 + 1println(1.toString()) println(1 toString()) println(1 toString)}}第 4 章 流程控制分支控制if-else让程序有选择的的执行,分支控制有三种:单分支、双分支、多分支单分支1)基本语法if(条件表达式){执行代码块}说明:当条件表达式为 ture 时,就会执行{ }的代码。2)案例实操需求:输入人的年龄,如果该同志的年龄小于 18 岁,则输出"童年"object TestIfElse {def main(args: ArrayString): Unit = {println("input age:")var age = StdIn.readShort()if (age < 18){ println("童年")}}}双分支基本语法if (条件表达式) {执行代码块 1} else {执行代码块 2}案例实操需求:输入年龄,如果年龄小于 18 岁,则输出"童年"。否则,输出"成年"。object TestIfElse {def main(args: ArrayString): Unit = {println("input age:")var age = StdIn.readShort()if (age < 18){ println("童年")}else{println("成年")}}}多分支基本语法if (条件表达式 1) {执行代码块 1}else if (条件表达式 2) {执行代码块 2案例实操需求 1:需求:输入年龄,如果年龄小于 18 岁,则输出"童年"。如果年龄大于等于 18 且小于等于 30,则输出"中年",否则,输出"老年"。需求 2:Scala 中 if else 表达式其实是有返回值的,具体返回值取决于满足条件的代码体的最后一行内容。需求 3:Scala 中返回值类型不一致,取它们共同的祖先类型。object TestIfElse{需求 4:Java 中的三元运算符可以用 if else 实现如果大括号{}内的逻辑代码只有一行,大括号可以省略。如果省略大括号,if 只对最近的一行逻辑代码起作用。嵌套分支在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层。分支外面的分支结构称为外层分支。嵌套分支不要超过 3 层。基本语法if(){if(){}else{}}案例实操需求:如果输入的年龄小于 18,返回"童年"。如果输入的年龄大于等于 18,需要再判断:如果年龄大于等于 18 且小于 30,返回"中年";如果其他,返回"老年"。Switch 分支结构在 Scala 中没有 Switch,而是使用模式匹配来处理。模式匹配涉及到的知识点较为综合,因此我们放在后面讲解。For 循环控制Scala 也为 for 循环这一常见的控制结构提供了非常多的特性,这些 for 循环的特性被称为 for 推导式或 for 表达式。范围数据循环(To)基本语法for(i <- 1 to 3){print(i + " ")}println()(1)i 表示循环的变量,<- 规定 to(2)i 将会从 1-3 循环,前后闭合案例实操需求:输出 5 句 "scala "object TestFor {def main(args: ArrayString): Unit = { for(i <- 1 to 5){println("scala "+i)}}}范围数据循环(Until)基本语法for(i <- 1 until 3) { print(i + " ")}println()这种方式和前面的区别在于 i 是从 1 到 3-1即使前闭合后开的范围案例实操需求:输出 5 句 "scala "object TestFor {def main(args: ArrayString): Unit = { for(i <- 1 until 5 + 1){println("scala" + i)}}}循环守卫基本语法for(i <- 1 to 3 if i != 2) { print(i + " ")}println()说明:循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环体内部,为false 则跳过,类似于continue。上面的代码等价for (i <- 1 to 3){if (i != 2) {print(i + " ")}}案例实操需求:输出 1 到 5 中,不等于 3 的值object TestFor {def main(args: ArrayString): Unit = { for (i <- 1 to 5 if i != 3) {println(i + "张三丰")}}}循环步长基本语法for (i <- 1 to 10 by 2) { println("i=

相关推荐
hopsky10 天前
《Scala 学习手册》核心内容详解
人工智能·学习·scala
abcy07121320 天前
scala playframework 搭建与新建controller教程
scala
lpfasd12321 天前
编程语言榜单变迁分析
开发语言·后端·scala
戮漠summer1 个月前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala
醉熏的石头2 个月前
Ubuntu 中的编程语言(中)
linux·ubuntu·scala
Irene19912 个月前
Scala、Java、Python、JavaScript 的核心特性和应用场景(Python 的“单机“局限性:GIL 机制导致的多核并行缺陷)
java·javascript·python·scala
李白的天不白3 个月前
确认 Nginx 配置文件是否真的生效
scala
醉颜凉3 个月前
Scala自定义Monad实战:从理论到应用的完整指南
大数据·算法·scala
那晚的她3 个月前
Scala中Set集合
开发语言·后端·scala
IvanCodes3 个月前
二、Scala流程控制:分支与循环
大数据·scala