三、Scala从入门到精通一一运算符

3、运算符介绍

运算符是一种特殊的符号,用以表示数据的运算赋值比较等。
1、算术运算符
2、赋值运算符
3、比较运算符(关系运算符)
4、逻辑运算符
5、位运算符

3.1、算术运算符

3.1.1、介绍

算术运算符(arithmetic)是对数值类型的变量进行运算的,在Scala程序中使用的非常多。

3.1.2、算术运算符一览图

在这里插入图片描述

3.1.3、案例演示

案例演示算术运算符的使用(Operator.scala)。
1、+, - , * , / , % 重点讲解 /、%
2、+、-、* 是一个道理,完全可以类推。
3、算数运算符的运算规则和Java一样

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  // 3.333333...
println("r3=" + r3 )
println("r3=" + r3.formatted("%.2f") ) // 3.33
// ++ 和 --
// 说明,在Scala中没有 ++ 和 -- ,而使用 += 1 和 —= 1
var num1 = 10
// num1++ //错误
num1 += 1 // 替代num1++
// num1 -- 错误
num1 -= 1 // 替代num1--
println(num1)

3.1.4、细节说明

1、对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
例如:var x : Int = 10/3 ,结果是 3
2、当对一个数取模时,可以等价 a%b=a-a/b*b , 这样我们可以看到取模的一个本质运算(和java 的取模规则一样)。

%的运算原则: a % b = a - a/ b * b
println(10 % 3) // 1
println(-10 % 3) // -1  // -10 + 3 * 3 = -1
println(-10 % -3) // -1 // -10 + 3 * -3 = -1

3、注意Scala中没有++、–操作符,需要通过+=、-=来实现同样的效果

3.1.5、课堂练习

1、假如还有97天放假,问:xx个星期零xx天

val days = 97
printf("还有%d个星期零%d天",days / 7,days % 7)

2、定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。[测试:232.5]

val huas = 232.5
注意这里如果是5而不是5.0的话结果会为0,因为在5/9的时候结果已经为零了
val ses = 5.0 / 9 * (huas - 100)
println("对应的摄氏温度=" + ses.formatted("%.1f")")

3.2、关系运算符(比较运算符)

3.2.1、基本介绍

1、关系运算符的结果都是boolean型,也就是要么是true,要么是false
2、关系表达式 经常用在 if结构的条件中或循环结构的条件中
3、关系运算符的使用和java一样

3.2.2、关系运算符的一览图

在这里插入图片描述

3.2.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.2.4、细节说明

1、关系运算符的结果都是Boolean型,也就是要么是true,要么是false。
2、关系运算符组成的表达式,我们称为关系表达式。 a > b
3、比较运算符“==”不能误写成“=”
4、使用陷阱: 如果两个浮点数进行比较,应当保证数据类型一致.

3.3、逻辑运算符

3.3.1、介绍

用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个Boolean值。

3.3.2、逻辑运算符的一览图

在这里插入图片描述

3.3.3、案例演示

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.4、赋值运算符

3.4.1、介绍

赋值运算符就是将某个运算后的值,赋给指定的变量。

3.4.2、赋值运算符的分类

在这里插入图片描述
说明:这部分的赋值运算涉及到二进制相关知识,其运行的规则和Java一样

3.4.3、案例演示

交换两个数的值

val a = 10
val b = 20 
println("a="+a+"\tb="+b)
// 交换
val t = a
a = b
b = t 
println("a="+a+"\tb="+b)

3.4.4、赋值运算符的特点

1、运算顺序从右往左
2、赋值运算符的左边 只能是变量,右边可以是变量、表达式、常量值/字面量
3、复合赋值运算符等价于下面的效果
比如:a+=3 等价于a=a+3

3.4.5、面试题

有两个变量,a和b,要求将其进行交换,但是不允许使用中间变量,最终打印结果:

var a = 10
var b = 20
a = a + b  // 30
b = a - b  // 10
a = a - b  // 20
println(s"a=$a,b=$b")

3.4.5、位运算符

在这里插入图片描述

3.4.6、运算符的特别说明

1、Scala不支持三目运算符 , 在Scala 中使用 if – else 的方式实现。

val num = 5 > 4 ? 5 : 4  //没有
val num = if (5>4) 5 else 4

3.4.7、课堂练习

案例1:求两个数的最大值
案例2:求三个数的最大值

val n1 = 4
val n2 = 8
val n3 = 10
var res = if (n1 > n2) n1 else n2
println("res=" + res)
res = if (res > n3) res else n3
println("res=" + res)

3.5、运算符的优先级

1、运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
2、只有单目运算符、赋值运算符是从右向左运算的。
3、运算符的优先级和Java一样。
小结运算符的优先级
1.() []
2.单目运算
3.算术运算符
4.移位运算
5.比较运算符(关系运算符)
6.位运算
7.关系运算符
8.赋值运算
9.,

3.6、键盘的输入语句

案列演示:
要求:从控制台接受用户信息,[姓名,年龄,薪水]

object Demo01 {
  def main(args: Array[String]): Unit = {
    // 要求:从控制台接受用户信息,[姓名,年龄,薪水]
    println("请输入姓名~")
    val name = StdIn.readLine()
    println("请输入年龄~")
    val age = StdIn.readInt()
    println("请输入薪水~")
    val sal = StdIn.readInt()
    println(s"姓名:$name  年龄:$age  薪水:$sal " )
    Cat.sayHi()
    Cat.sayHello()
  }
}

// 声明了一个对象(判断对象) 
object Cat extends AAA {
  // 方法
  def sayHi(): Unit = {
    println("小狗汪汪叫~")
  }
}

trait AAA { // AAA是特质,相当于java的interface + abstract class
  def sayHello(): Unit = {
    println("AAA sayHello")
  }
}
发布了13 篇原创文章 · 获赞 17 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44258756/article/details/105174752