Scala运算符

[toc]

## Scala运算符

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

### 1. 算术运算符

> 1. 算术运算符(arithmetic)是对`数值类型的变量`进行运算的,在Scala程序中使用的非常多。
>
> 2. 算术运算符一览图:
>
> ![image-20210322213558573](assets/image-20210322213558573.png)
>
> 3. 案例演示算术运算符的使用`(Operator.scala)`:
>
> 1. `+, - , * , / , % 重点讲解 /、%`
> 2. `+、-、* 是一个道理,完全可以类推。`
> 3. ==算数运算符的运算规则和Java一样。==
>
> 4. 细节说明:
>
> 1. 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 `例如:var x : Int = 10/3 ,结果是 3`
> 2. 当对一个数取模时,可以等价 `a%b=a-a/b*b` , 这样我们可以看到取模的一个本质运算(==和java 的取模规则一样==)。
> 3. ==Scala中没有++、--操作符,需要通过+=、-=来实现同样的效果==。

~~~~scala
/**
* @Date 2021/3/22 20:05
* @Version 10.21
* @Author DuanChaojie
*/
object ArithoperDemo01 {
def main(args: Array[String]): Unit = {
/** / 号的使用
* r1 = 3
* r2 = 3.0
* r3 = 3.3333333333333335
* r3 = 3.33
*/
var r1: Int = 10 / 3
println("r1 = " + r1)
var r2: Double = 10 / 3
println("r2 = " + r2)
var r3: Double = 10.0 / 3
println("r3 = " + r3)
println("r3 = " + r3.formatted("%.2f"))

/** %的使用
* 1
* -1
* -1
* 1
*/
println(10 % 3)
println(-10 % 3)
println(-10 % -3)
println(10 % -3)

/** ++ 和 --
* 在scala中没有 ++ 和 --,而使用 +=1 和 -=1
*/
var num1 = 10
// num1++ 错误
num1 += 1
num1 -= 1
println(num1) //10


}
}
~~~~

#### 课堂练习

> 1. 假如还有97天放假,问:xx个星期零xx天
> 2. 定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。[测试:232.5]

~~~~scala
/**
* @Date 2021/3/22 20:17
* @Version 10.21
* @Author DuanChaojie
*/
object ArithoperExercise01 {
def main(args: Array[String]): Unit = {
/**
* 假如还有97天放假,问:xx个星期零xx天
*/
val days = 97

// 13个星期零6天
printf("%d个星期零%d天", days / 7, days % 7)

println()
/**
* 定义一个变量保存华氏温度,
* 华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),
* 请求出华氏温度对应的摄氏温度。[测试:232.5]
*/
val huashi = 232.5
val sheshi = 5.0 / 9 * (huashi - 100)
printf("232.5华氏度等于%.2f摄氏度", sheshi)

}
}
~~~~

### 2. 关系运算符(比较运算符)

> 1. 关系运算符的结果都是Boolean型,也就是要么是true,要么是false
>
> 2. 关系表达式 经常用在 if结构的条件中或循环结构的条件中
>
> 3. `关系运算符的使用和java一样`
>
> 4. 关系运算符一览图:
>
> ![image-20210322215226523](assets/image-20210322215226523.png)
>
> 5. 案例说明:

~~~~scala
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. 使用陷阱: 如果两个浮点数进行比较,应当保证数据类型一致。

### 3. 逻辑运算符

> 1. 用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个Boolean值。
>
> 2. 逻辑运算符一览图:
>
> ![image-20210322215700198](assets/image-20210322215700198.png)

### 4. 赋值运算符

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

#### 赋值运算符的分类

==这部分的赋值运算涉及到二进制相关知识,其运行的规则和Java一样。==

![image-20210322215926999](assets/image-20210322215926999.png)

![image-20210322215938083](assets/image-20210322215938083.png)

 

~~~~scala
/**
* @Date 2021/3/22 20:32
* @Version 10.21
* @Author DuanChaojie
*/
object AssignoperDemo01 {

def main(args: Array[String]): Unit = {
var num = 2
// 左移2位后赋值
num <<= 2
println(num)
num >>= 3
println(num) //1

// 在scala 中支持代码块,返回值
val res = {
if (num > 1) "hello scala" else 100
}
println("res = " + res) //100

swap()
exchange()

}


/**
* 不使用第三个值交换两个数的值
*/
def swap(): Unit = {
var a = 10
var b = 20
a = a + b
b = a - b
a = a - b
println("a =" + a)
println("b =" + b)
}

/**
* 位运算
*/
def exchange(): Unit = {
var a = 10
var b = 20
a = a ^ b
println(a)
b = a ^ b
println(b)
a = a ^ b
println(a)
}
}
~~~~

#### 赋值运算符特点

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

#### 位运算符

==位运算符的规则和Java一样==

![image-20210322220428356](assets/image-20210322220428356.png)

#### 运算符的特别说明

> Scala不支持三目运算符 , 在Scala 中使用 if – else 的方式实现。
>
> - `val num = 5 > 4 ? 5 : 4 //没有`
> - `val num = if (5>4) 5 else 4`
>
> ==Scala的设计理念:一种事情尽量只有一种方法完成,这样可以让代码风格更加统一。==

#### 课堂练习

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

~~~~scala
/**
* @Date 2021/3/22 20:49
* @Version 10.21
* @Author DuanChaojie
*/
object NoticeDemo01 {
def main(args: Array[String]): Unit = {
/**
* 案例1:求两个数的最大值
* 案例2:求三个数的最大值
*/
println(max(1,2))
println(max(4,3))
println(max(1,2,3))
println(max(6,5,4))

}

def max(n1: Int, n2: Int): Int = {
if (n1 > n2) return n1 else n2
}

def max(n1: Int, n2: Int, n3: Int): Int = {
var res = if (n1 > n2) n1 else n2
res = if (n3 > res) n3 else res
return res
}
}
~~~~

### 5. 运算符的优先级

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

![image-20210322220958110](assets/image-20210322220958110.png)

### 6. 键盘输入语句

> 1. 在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。
> 2. 要求:可以从控制台接收用户信息,【姓名,年龄,薪水】。

~~~~scala
import scala.io.StdIn

/**
* @Date 2021/3/22 21:00
* @Version 10.21
* @Author DuanChaojie
* trait Animal //Animal是特质,等价于Java中的interface + abstract class
*/
object InputConDemo01 {
def main(args: Array[String]): Unit = {
/**
* 要求:可以从控制台接收用户信息,【姓名,年龄,薪水】
*/
println("请输入姓名:")
val name = StdIn.readLine()
println("请输入年龄")
val age = StdIn.readInt()
println("请输入薪水:")
val salary = StdIn.readDouble()
printf("用户的信息为:name=%s, age=%d,salary=%.2f", name, age, salary)

}
}
~~~~

## ☆

posted @ 2022-01-04 22:14  青竹之下  阅读(242)  评论(0编辑  收藏  举报