大数据技术之_16_Scala学习_03
第三章 运算符
3.1 运算符介绍
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
1、算术运算符
2、赋值运算符
3、比较运算符(关系运算符)
4、逻辑运算符
5、位运算符
3.2 算术运算符
3.2.1 介绍
算术运算符(arithmetic)是对数值类型的变量
进行运算的,在 Scala 程序中使用的非常多。
3.2.2 算术运算符一览图
3.2.3 案例演示
案例演示算术运算符的使用。
+, -, *, /, % 重点讲解 /、%
+, -, * 是一个道理,完全可以类推。
算数运算符的运算规则和 Java 一样。
示例代码如下:
package com.atguigu.chapter03.arithoper
object Demo01 {
def main(args: Array[String]): Unit = {
// / 的使用
var r1: Int = 10 / 3
println("r1=" + r1) // 3
var r2: Double = 10 / 3
println("r2=" + r2) // 3.0
var r3: Double = 10.0 / 3
println("r3=" + r3) // 3.3333333333333335
println("r3=" + r3.formatted("%.2f")) // 3.33
// % 的使用
// 1、% 运算的原则:a % b = a - a/b * b
println(10 % 3) // 1
println(-10 % 3) // -1
println(-10 % -3) // -1
println(10 % -3) // 1
// ++ 和 --
// 说明:在 Scala 中没有 ++ 和 -- 了,而是使用 +=1 和 -=1
var num1 = 10
// num1++ // error
// ++num1 // error
num1 += 1 // 替代了 num1++
num1 -= 1 // 替代了 num1--
}
}
3.2.4 细节说明
1、对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。例如:var x: Int = 10/3 结果是 3。
2、当对一个数取模时,可以等价 a%b=a-a/b*b ,这样我们可以看到取模的一个本质运算(和 java 的取模规则一样)。
3、注意:Scal中没有 ++、-- 操作符,需要通过 +=、-= 来实现同样的效果。
3.3.5 课堂练习
1、假如还有 97 天放假,问:xx 个星期零 xx 天。
2、定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。[测试:232.5]
示例代码如下:
package com.atguigu.chapter03
object Exercise01 {
def main(args: Array[String]): Unit = {
// 1、假如还有 97 天放假,问:xx 个星期零 xx 天。
// (1) 搞清楚需求(读题)
// (2) 思路分析
// (3) 代码实现
val days = 97
printf("统计结果是:%d个星期零%d天", days / 7, days % 7)
println()
// 2、定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。[测试:232.5]
val huashi = 232.5
val sheshi = 5 / 9.0 * (huashi - 100)
println("摄氏温度是" + sheshi.formatted("%.2f") + "℃")
}
}
输出结果如下:
统计结果是:13个星期零6天
摄氏温度是73.61℃
3.3 关系运算符(比较运算符)
3.3.1 基本介绍
1、关系运算符的结果都是 Boolean 型,也就是要么是 true,要么是 false。
2、关系表达式 经常用在 if结构的条件中或循环结构的条件中。
3、关系运算符的使用和 java 一样。
3.3.2 关系运算符一览图
3.3.3 案例演示
案例演示关系运算符的使用。
示例代码如下:
var a = 9
var b = 8
println(a>b) // true
println(a>=b) // true
println(a<=b) // false
println(a<b) // false
println(a==b) // false
println(a!=b) // true
var flag: Boolean = a > b // true
3.3.4 细节说明
1、关系运算符的结果都是 Boolean 型,也就是要么是 true,要么是 false。
2、关系运算符组成的表达式,我们称为关系表达式。【a > b】
3、比较运算符 “==” 不能误写成 “=”。
4、使用陷阱: 如果两个浮点数进行比较
,应当保证数据类型一致。
3.4 逻辑运算符
3.4.1 介绍
用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个 Boolean 值。
3.4.2 逻辑运算符一览图
假定变量 A 为 true,B 为 false
示例代码如下:
var a = true
var b = false
println("a && b = " + (a && b)) // false
println("a || b = " + (a || b)) // true
println("!(a && b) = " + !(a && b)) // true
3.5 赋值运算符
3.5.1 介绍
赋值运算符就是将某个运算后的值,赋给指定的变量。
3.5.2 赋值运算符的分类
1、
2、
说明
:这部分的赋值运算涉及到二进制相关知识,其运行的规则和 Java 一样。
原码、反码、补码 详解:https://www.cnblogs.com/chenmingjun/p/8306863.html
3.5.3 案例演示
交换两个数的值。三种方法
示例代码如下:
// 方式一:使用中间变量
var a = 10
var b = 99
println("a=" + a + "\tb=" + b)
// 交换
val t = a
a = b
b = t
println("a=" + a + "\tb=" + b)
// 方式二:使用加减运算方式
var a = 10
var b = 99
a = a + b
b = a - b // => (a+b)-b = a = b
a = a - b // => (a+b)-a = b = a
// 方式三:位运算方法:任意一个数与任意一个给定的值连续异或两次,值不变。
a = a ^ b;
b = a ^ b; // b = a ^ b = a ^ b ^ b = a
a = a ^ b; // a = a ^ b = a ^ a ^ b = b
3.5.4 赋值运算符特点
1、运算顺序从右往左。
2、赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值/字面量。
3、复合赋值运算符等价于下面的效果:
比如:a += 3 等价于a = a + 3
示例代码如下:
package com.atguigu.chapter03.assignoper
object Demo01 {
def main(args: Array[String]): Unit = {
var num1 = 2
num1 <<= 2
println("num1=" + num1) // 8
var num2 = 2
num2 >>= 1
println("num2=" + num2) // 1
// 在 scala 中支持在代码块返回值
val res1 = {
90
}
println("res1=" + res1) // 90
val res2 = {
if (num1 > 1) "hello" else 100
}
println("res2=" + res2)
}
}
3.5.5 位运算符
说明
: 位运算符的规则和Java一样
3.5.6 运算符的特别说明
Scala 不支持三目运算符,在 Scala 中使用 if – else 的方式实现。
val num = 5 > 4 ? 5 : 4 // 没有
val num = if (5 > 4) 5 else 4
变成设计思想:
3.5.7 练习
1、案例1:求两个数的最大值
2、案例2:求三个数的最大值
示例代码如下:
package com.atguigu.chapter03.notice
object Demo01 {
def main(args: Array[String]): Unit = {
// val num = 5 > 4 ? 5 : 4 // 没有
val num = if (5 > 4) 5 else 4
// 1、案例1:求两个数的最大值
// 2、案例2:求三个数的最大值
val n1 = 4
val n2 = 8
var res = if (n1 > n2) n1 else n2
println("res=" + res)
val n3 = 12
res = if (res > n3) res