第 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: Array[String]): 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: Array[String]): 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: Array[String]): 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: Array[String]): 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: Array[String]): 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: Array[String]): Unit = {// 测试:1000 << 1 =>10000var n1 :Int =8n1 = n1 << 1println(n1)}}Scala 运算符本质在 Scala 中其实是没有运算符的,所有运算符都是方法。当调用对象的方法时,点.可以省略如果函数参数只有一个,或者没有参数,()可以省略object TestOpt {def main(args: Array[String]): 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: Array[String]): Unit = {println("input age:")var age = StdIn.readShort()if (age < 18){ println("童年")}}}双分支基本语法if (条件表达式) {执行代码块 1} else {执行代码块 2}案例实操需求:输入年龄,如果年龄小于 18 岁,则输出"童年"。否则,输出"成年"。object TestIfElse {def main(args: Array[String]): 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: Array[String]): 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: Array[String]): 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: Array[String]): Unit = { for (i <- 1 to 5 if i != 3) {println(i + "张三丰")}}}循环步长基本语法for (i <- 1 to 10 by 2) { println("i=

相关推荐
凉白开33819 小时前
Scala基础知识
开发语言·后端·scala
不要不开心了19 小时前
Scala内容
开发语言·pytorch·flask·scala·dash
2401_8242568619 小时前
Scala的函数式编程
开发语言·后端·scala
Gvemis⁹2 天前
Scala总结(三)
开发语言·后端·scala
星辰瑞云2 天前
Scala(2)
开发语言·后端·scala
苏小夕夕2 天前
Scala(二)
scala
不辉放弃3 天前
Java/Scala是什么
java·scala
Gvemis⁹3 天前
Scala总结(二)
大数据·开发语言·scala
晚椰子树5 天前
Scala的数据类型
开发语言·后端·scala