1. 程式人生 > 資訊 >央視:北方新能源汽車“里程焦慮”再現,主要是因為充電樁分佈不均“充電難”

央視:北方新能源汽車“里程焦慮”再現,主要是因為充電樁分佈不均“充電難”

[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)

}
}
~~~~

## ☆