运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
1、算术运算符
2、赋值运算符
3、比较运算符(关系运算符)
4、逻辑运算符
5、位运算符
算术运算符(arithmetic)是对数值类型的变量进行运算的,在Scala程序中使用的非常多。
案例演示算术运算符的使用(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)
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中没有++、–操作符,需要通过+=、-=来实现同样的效果
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")")
1、关系运算符的结果都是boolean型,也就是要么是true,要么是false
2、关系表达式 经常用在 if结构的条件中或循环结构的条件中
3、关系运算符的使用和java一样
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
1、关系运算符的结果都是Boolean型,也就是要么是true,要么是false。
2、关系运算符组成的表达式,我们称为关系表达式。 a > b
3、比较运算符“==”不能误写成“=”
4、使用陷阱: 如果两个浮点数进行比较,应当保证数据类型一致.
用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个Boolean值。
var a = true
var b = false
println("a && b = " + (a && b)) // false
println("a || b = " + (a || b)) // true
println("!(a && b) = " + !(a && b)) // true
赋值运算符就是将某个运算后的值,赋给指定的变量。
说明:这部分的赋值运算涉及到二进制相关知识,其运行的规则和Java一样
交换两个数的值
val a = 10
val b = 20
println("a="+a+"\tb="+b)
// 交换
val t = a
a = b
b = t
println("a="+a+"\tb="+b)
1、运算顺序从右往左
2、赋值运算符的左边 只能是变量,右边可以是变量、表达式、常量值/字面量
3、复合赋值运算符等价于下面的效果
比如:a+=3 等价于a=a+3
有两个变量,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")
1、Scala不支持三目运算符 , 在Scala 中使用 if – else 的方式实现。
val num = 5 > 4 ? 5 : 4 //没有
val num = if (5>4) 5 else 4
案例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)
1、运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
2、只有单目运算符、赋值运算符是从右向左运算的。
3、运算符的优先级和Java一样。
小结运算符的优先级
1.() []
2.单目运算
3.算术运算符
4.移位运算
5.比较运算符(关系运算符)
6.位运算
7.关系运算符
8.赋值运算
9.,
案列演示:
要求:从控制台接受用户信息,[姓名,年龄,薪水]
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")
}
}