4. 运算符
4.1 运算符种类
-
算术运算符
-
赋值运算符
-
比较运算符(关系运算符)
-
逻辑运算符
-
位运算符
4.2 算数运算符
var cal = 10 / 3
println(cal) // 3
var cal2: Double = 10 / 3
println(cal2) // 3.0
var cal3 = 10.0 / 3
println(cal3) // 3.3333333333333335
println(cal3.formatted("%.2f")) // 3.33 保留小数点后两位,并且使用四舍五入
var cal4 = 10 % 3
println(cal4) // 1
细节:
对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如:var x : Int = 10/3 ,结果是 3
当对一个数取模时,可以等价 a%b=a-a/b*b , 这样我们可以看到 取模的一个本质运算(和java 的取模规则一样)
println(-10 % 3) // -1
println(10 % (-3)) // 1
println(-10 % (-3)) // -1
注意:Scala中没有++、–操作符,需要通过+=、-=来实现同样的效果
小练习
/*计算周数和天数*/
var days = 96
var weeks = days / 7
var day = days % 7
println(s"还剩下${weeks}周及 $day 天") // 还剩下13周及 5 天
/*计算摄氏度*/
var huashi = 32.4
var sheshi = 5.0 / 9 * (huashi - 100)
println(sheshi.formatted("%.2f")) // -37.56
4.3 关系运算符
关系运算符一览图
小细节
var a = 1.3
var b = 1.3
println(a == b) //true
a = 1.2
b = 1.2f
println(a == b) //false
a = 1
b = 1.0
println(a == b) //true
细节说明
-
关系运算符的结果都是Boolean型,也就是要么是true,要么是false。
-
关系运算符组成的表达式,我们称为关系表达式。
-
比较运算符“==”不能误写成“=”
-
使用陷阱: 如果两个浮点数进行比较,应当保证数据类型一致
4.4 逻辑运算符
一览图
Scala 的逻辑运算符使用和 Java 一致
4.5 赋值运算符
一览图
关于按位与 &:两个数的二进制位同为1,则为1;否则为0
关于按位或 |:两个数的二进制位有1,则为1,;否则为0
关于按位异或 ^ :两个数的二进制位不同,则为1;相同为0
4.6 位运算符
小练习:快速交换两个数的值
var d = 2
var e = 1
d = d + e
e = d - e
d = d - e
或者使用按位异或
var d = 2
var e = 1
d = d ^ e
e = d ^ e
d = d ^ e
注意:Scala 没有三元运算符,而是用 if else 替换
// 求出两个数的最大值
val a = 10
val b = 20
val max = if (a > b) {
a
} else {
b
}
println(max)
4.7 运算符优先级
4.8 键盘输入
先看看 Java 怎么处理键盘输入的
public class Demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入名字");
String name = scanner.next();
System.out.println("请输入年龄");
int age = scanner.nextInt();
System.out.println(String.format("名字是:%s,年龄是:%s", name, age));
}
}
再看看 Scala 怎么处理的
def main(args: Array[String]): Unit = {
println("请输入名字:")
val name = StdIn.readLine()
println("请输入年龄:")
val age = StdIn.readShort()
println(s"名字是:${name},年龄是:${age}")
}