# 大數據學習筆記第3天-運算符 #
## 回顧
1. 什么是關鍵字?java中的關鍵字的特點是什么?
2. 什么是標識符?標識符有哪些組成規則?
3. 什么是字面量常量?
4. Java中字面量常量有哪幾種?
5. 十進制、二進制、八進制、十六進制之間的轉換。
6. 如何求一個負數的表現形式?
7. 定義變量的兩種格式。
8. Java中基本數據類型有哪些?各占用幾個字節?
9. 什么是變量的作用域?
10. 顯式類型轉換的格式。
### 答案
1. 答:Java語言中已經被賦予特定意義的一些單詞,不可以把這些字作為標識符來使用。特點:關鍵字全部使用小寫字母。
2. 答:標識符可以簡單地理解為一個名字,用來標識類名、變量名、方法名、數組名、文件名的有效字符序列。標識符由任意順序的字母、下劃線、美元符號和數字組成,并且第一個字符不能是數字。標識符不能死Java中的保留關鍵字。
3. 答:在程序運行過程中一直不會改變的量稱為常量,通常也稱為“final變量”。常量在整個程序中只能被賦值一次。在為所有的對象共享值時,常量是非常有用的。
final 數據類型 常量名稱[=值];
常量名通常使用大寫字母,但并非是必須的,只是一種約定成熟的規定。
4. 答:字面常量分為:整型、布爾、浮點型、字符型、字符串、null。
5. 答:十進制轉二進制,基數為2,轉八進制基數為8,轉十六進制基數為16;二進制轉十進制:2^0, 2^1....;
6. 答:負數的規律。從右往左,遇到第1個1,往右原樣,往左取反。
7. 答:方法1:數據類型 變量名=初值; 方法2:數據類型 變量名; 變量名=初值;
8. 答:基本數據類型:整型(byte[1], short[2], int[4], long[8])、浮點型(float[4], double[8])、字符型(char[2])、布爾型(boolean[1])。
9. 答:{}內的變量稱為局部變量。局部變量只在當前代碼塊中有效。
10. 答:(byte,short,char)->int->long->float->double
## 思考題
## 第一節課
- 回顧
- 思考題
- 算術運算符
## 第二節課
- 賦值運算符
- 比較運算符
- 邏輯運算符
## 第三節課
- 位運算符
- 按位與按位或、異或操作
- 移位運算規律
- 三元運算符
## 第四節課
- 分支結構
- 從鍵盤錄入數據
- 判斷正負
## 運算符分類
- 算術運算符
- 賦值運算符
- 比較運算符
- 邏輯運算符
- 位運算符
- 三元運算符
### 算術運算符

### ++和--:
- 自加 (++)
- 放在變量前:先自增,再使用
- 放在變量后:先使用,再自增
- 自減 (--)
- 放在變量前:先自減,再使用
- 放在變量后:先使用,再自減
注意:只能對變量使用。
字符串參與運算:
1. 兩個操作數都是字符串;
2. 一個字符串一個變量;
3. 多個操作數;
“+”除了字符串相拼接功能外,還能把非字符串轉換成字符串,加空串即可。 String s = 5 + "";
思考題:
System.out.println("5+5="+5+5); //5+5=55
System.out.println(5+5+"hello"); //10hello
### 算術運算符注意事項:
- 除法操作兩個操作數是整數時,結果也是整數,余數部分舍棄;
- %操作獲得的是除法操作的余數;%結果的符號取決于被模數,即%前面的數的符號決定了結果的正負。
實例:
int x=3500;
System.out.println(x/1000*1000); //3000
## 賦值運算符
- 符號:=,+=,-=,`*=`,/=,%=
- 左側為變量,右側為字面量,或變量,或表達式;
示例:
支持連續賦值:int a=b=c; a=b=c=3;
int a = 3; a += 5; // 等同于運算 a = a + 5;
擴展:+=,-=,`*=`,/=,%= 自動做強制類型轉換。
public class Demo{
public static void main(String[] args){
short s=5;
//s = s + 5; //錯誤: 不兼容的類型: 從int轉換到short可能會有損失
s+=5; //+=運算符會強制類型轉換,等同于 s+(short)5
System.out.println(s); //10
}
}
## 比較運算符
- 操作數是常量、變量或表達式;
- 比較運算符的結果是boolean型,要么是true,要么是false,常用作條件判斷。
- 比較運算符"=="不能寫成"=";

## 邏輯運算符
- 與:兩個條件都是true才是true;
- 或:只要有一個條件是true就是true;
- 異或:兩個操作數不一樣,才是true;
- 短路與,短路或:在左側的操作數決定整個表達式的值的時候,右側的表達式不進行運算;


### 邏輯運算符小結:
- 邏輯運算符的操作數都是布爾型表達式;
- "&"和"&&"(短路與)的區別
- 單&時,左邊無論真假,右邊都進行運算;
- 雙&時,如果左邊為真,右邊參與運算,如果左邊為假,那么右邊不參與運算;
- 或"|"與"||"(短路或)同理,左邊為真時,右邊不參與運算;
總結:只有在右邊需要運算時,才參與運算;
異或(^)與或(|)的區別:異或求的是異;或只需要一個為true結果就為true。
## 位操作符
...
## 三元運算符
(條件表達式)?表達式1:表達式2;
- 如果條件為true,整個表達式結果是表達式1;
- 如果條件為false,整個表達式結果是表達式2;
- 通常兩個表達式同類型;
- 三元表達式整體是有值的,也就是說,它不能單獨使用;要么直接打印,要么賦值;
### 示例:獲取兩個數中的最大值。
int x=3, y=4;
int max = (x>y)?x:y; //變量max存儲的就是兩個數的大數
## 程序流程控制
- 順序結構
- 分支結構(選擇結構) if, switch
- 循環結構(while, do...while, for)
### 程序流程控制
順序結構:語句按照順序依次執行,單純的順序結構的程序基本不存在。大型的程序從宏觀上來看的話,各個模塊之間也是呈現順序結構。

### 分支結構:if
分支結構也稱為選擇結構,程序根據條件表達式的值來決定程序的走向。
if(條件表達式)
{
語句體;
}
...//其他語句

### 分支結構:if-else
if(條件表達式){
語句體1;
}else{
語句體2;
}
...//其他語句

if語句注意事項:
- if后的括號內一定是布爾值或布爾表達式;
- 第二種格式與三元運算符的區別:三元運算符運算完要有值出現,并且可以寫在其他表達式中;
- if的語句塊中可以加多條語句,實現更復雜的邏輯
- if/else后邊的大括號可以省略,此時if語句只能控制到另一個分號結束;如果有多條語句的話,不能省略;建議不要省略大括號;
### 分支結構:if-else if
if(條件表達式1){
語句體1;
}elseif(條件表達式2){
語句體2;
}elseif(條件表達式3){
語句體3;
}
...
else{
語句體n;
}

### 分支結構:if-else練習
如何接收從鍵盤錄入數據?
import java.util.Scanner;
Scanner s=new Scanner(System.in);
s.nextInt(); //獲取int值,用s.next()獲取字符串

### 練習
1. 從鍵盤錄入數據,使用程序判斷正負;
2. 從鍵盤錄入整數作為成績,根據成績顯示提示:
- 60分以下顯示“不及格”
- 60-79分顯示“及格”
- 80-99分顯示“優秀”
- 100分顯示“滿分”
3. 改進前面的程序,增加對非法成績的處理;
4. 從鍵盤輸入兩個數,顯示其中最大值,要求使用if-else結構
5. 從鍵盤輸入三個數,顯示其中最大值,要求使用if-else和三元表達式兩種方式實現