Cris 的 Scala 笔记(四):运算符

4. 运算符

4.1 运算符种类

  1. 算术运算符

  2. 赋值运算符

  3. 比较运算符(关系运算符)

  4. 逻辑运算符

  5. 位运算符

4.2 算数运算符

Cris 的 Scala 笔记(四):运算符

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 关系运算符

关系运算符一览图

Cris 的 Scala 笔记(四):运算符

小细节

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

细节说明

  1. 关系运算符的结果都是Boolean型,也就是要么是true,要么是false。

  2. 关系运算符组成的表达式,我们称为关系表达式。

  3. 比较运算符“==”不能误写成“=”

  4. 使用陷阱: 如果两个浮点数进行比较,应当保证数据类型一致

4.4 逻辑运算符

一览图

Cris 的 Scala 笔记(四):运算符

Scala 的逻辑运算符使用和 Java 一致

4.5 赋值运算符

一览图

Cris 的 Scala 笔记(四):运算符

Cris 的 Scala 笔记(四):运算符

关于按位与 &:两个数的二进制位同为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

Cris 的 Scala 笔记(四):运算符

注意:Scala 没有三元运算符,而是用 if else 替换

// 求出两个数的最大值

val a = 10
val b = 20

val max = if (a > b) {
  a
} else {
  b
}
println(max)

4.7 运算符优先级

Cris 的 Scala 笔记(四):运算符

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}")
}