java基礎複習(三)
一、運算子
1.算術運算子
1) 加法(+) 加法 正號 字串拼接
2) 減法(-) 減法 負號
3) 乘法 (*) 乘法
4) 除法(/) 除法
-
-
- 整數(小數)相除的例子
-
10/3 =3; 10.0/3=3.33333…
-
-
- 0/0
- 0.0/0.0
-
結果是NaN ,任何的NaN都不等於自己(面試題)
-
-
- 1.0/0.0
-
Infinity,表示無窮大
5) 取模(%)
2.自增自減
++(自增) --(自減)
自增自減只能夠用於 變數,不能用於常量
自增自減運算的優先順序 比
1)基本的使用
1)
int i=3; // 表示把3賦值給變數i i++; //表示變數i的值加1,i的值變成4 ++i; //表示變數i的值加 1,i的值變成5 |
2)
int i=3; int j = i++; i等於多少,j等於多少? |
3)
int i=3; int j = ++i; i等於多少,j等於多少? |
區別:
把整個表示式看成是一個整體。
如果變數名在前面,那麼整個表示式的值就是原來值不變。
如果變數名在後面,那麼整個表示式的值就是原來的值加
2)常見的面試題
1.
2.
3.
3)練習
1.
int i=5; i++; System.out.println("i="+i);//6 ++i; System.out.println("i="+i);//7 int a=++i; System.out.println("a="+a);//8 i=8 a = a++; System.out.println("a="+a);//8 a = ++a; System.out.println("a="+a);//9
|
2.
4)總結
不要把單獨的 自增自減 和 有表示式的自增自減搞混淆了
i++;
int j =i++;
|
一定要弄清楚計算規則,表示式的值 和 具體計數器的值的變化是什麼
3.賦值運算
= += -= *= /= %=
1) 賦值符號的運算順序?
從右到左,把符號右邊的值賦值到左邊的變數中
2) 上面 後五個分別看成是一個整體: 例如 += 看成是一個符號,不要看成兩個;
int i=3; i +=2;// 表示把2 累加到變數 i 中 i -=1; i *=3; i /=3; i%=3; |
特例:
short s = 3; s += 2; ----》OK
short s = 3; s = s+2;//結果值是int,int不能自動轉換為short
|
4.比較運算子
== != > < >= <= instanceof
規律:比較運算的結果是一個布林型別的值(true 或false);
- 舉例:
定義一個布林表示式,列印輸出
- 特別說明:instanceof 是判斷一個物件是否屬於某種型別
是否可以用於我們之前學習的基本資料型別(回憶一下我們之前學習的資料型別除了基本資料型別 還有什麼?)
5.邏輯運算
& | && || ^ !
是應用於多個條件的組合判斷。
-
- 示例說明:
例如小明參加2個學科的考試 java php
1) java 和 php 同時考100分,獎勵 歐洲十日遊
虛擬碼描述:java==100 並且 php==100
2) java 和php,只要有一門考100分,獎勵 原始碼優惠券2000元一張
虛擬碼描述:java==100 或者 php==100
- 邏輯運算的兩邊結果值都必須是什麼型別? 布林
& :兩邊都為true ,結果為true
| : 只要有一邊為true,結果為true
&& : 兩邊都為true ,結果為true
|| : 只要有一邊為true,結果為true
^ : 兩邊不一樣,結果為true ,否則為false,舉個例子列印一下
! : 邏輯非,舉個例子列印一下
&& || 和 & | 區別?
1) & | 既可以充當邏輯運算,也可以是位運算子,怎麼區分是邏輯運算還是位運算?
根據表示式的結果是否為 布林型別 來判斷
2) 雙與 雙或 具有短路行為 什麼意思?
舉個例子 上面小明的考試的成績 要求是兩科都為100分,看到第一科低於100分之後沒有必要再看第二科成績
程式碼表示:Java = 100 && php = 100 (java只考了5分)
如果邏輯運算左邊的值能夠確定整個邏輯運算表示式的值,那麼右邊就不執行了,短路了。
&& 何時短路 ? 左邊表示式結果為false
|| 何時短路 ? 左邊表示式結果為true
- 思考:如何驗證短路行為?
提示:
右邊表示式用 自增自減,例如 ++i = 5
或者使用一個編譯正常,執行報錯的表示式,例如 1/0
常見錯誤:
例如:判斷一個整數的變數 a裡面的資料 在0-100之間
正確寫法: a>0 && a<100
錯誤寫法: 0< a < 100 (java沒有這種語法,不支援)
6.位運算子
& | ^ ~ << >> >>>
位運算就是 二進位制的位進行運算。
- 示例:比如計算 125+176 ,從數學的角度是怎麼計算的?
- 同理,位運算也類似,比如 3&4
可以把1看成是true,把0看成是false
& :與 位運算,兩邊為1,結果為1
| :或 位運算,有一個為1,結果為1
^ : 異或,兩邊不一樣,就為1,否則為0
~ : 取反,1變成0 ,0 變成1
<< : 向左位移動,例如1<<3
>> : 向右位移動,例如8>>2
>>>: 無符號向右移動
注意:正數的補碼,反碼,原碼 都一樣;
負數的反碼:符號為不變,其他位取反;
負數的補碼:它的反碼+1;
7.三目運算子
語法格式: X ? Y : Z
1) 上面的三目運算整體看成是一個表示式,應該有一個結果值
2) X ? 布林型別的值或者結果為布林型別的表示式
3) Y Z ? 一般來說資料型別相同的值或者表示式
4) 運算的規則?
X 為true,就是 Y 的結果值 ( 冒號前面的表示式的值)
X為false,就是Z的結果值 ( 冒號後面的表示式的值)
x ? y : z
注意: 不要受 ? 和 : 的干擾,它們只是一個固定語法格式而已
示例1: 找出兩個整型變數中的最大值
示例2:判斷一個數是 奇數 還是 偶數
示例3: 例如小明學習java 考試成績 >=60 顯示 非常優秀 否則輸出 還有很大的提升空間。
二、條件選擇結構
- 舉例: 加個條件 列印一句話。
if(1==2){
System.out.println(“今晚請大家吃大餐!”);
}
- 示例
智慧機器人,開發一套軟體,負責智慧上廁所(應該獲取硬體裝置上的性別標識)。
1.
if(判斷條件){ 滿足 判斷條件(true),就執行此大括號裡面的內容 } |
2.
if(判斷條件A){ 滿足 判斷條件A(true),就執行此大括號裡面的內容,後面的else不會執行 }else{ 前面的 判斷條件A(false),執行else大括號裡面的內容 } |
3.
if(判斷條件A){ 滿足 判斷條件A(true),就執行此大括號裡面的內容,後面的else-if不執行 }else if(判斷條件B){ 滿足 判斷條件B(true),就執行此大括號裡面的內容 }
|
4.
if(判斷條件A){ 滿足 判斷條件A(true),就執行此大括號裡面的內容,後面的else-if不執行 }else if(判斷條件B){ 滿足 判斷條件B(true),就執行此大括號裡面的內容 }else{ 前面的if esle-if 都不滿足條件(false),執行此大括號裡面的內容 } |
5
else if 可以有多個
if(判斷條件A){ 滿足 判斷條件A(true),就執行此大括號裡面的內容,後面的else-if不執行 }else if(判斷條件B){ 滿足 判斷條件B(true),就執行此大括號裡面的內容,後面的else-if else 不執行 } else if(判斷條件C){ 滿足 判斷條件C(true),就執行此大括號裡面的內容,後面的 else 不執行 }else{ 前面的if esle-if 都不滿足條件(false),執行此大括號裡面的內容 }
|
- 總結
- if 後面的大括號如果不寫,表示執行是後面的第一行程式碼(不建議這樣寫)
- 練習
- 求出2個變數中的最大值
- 判斷一個數是否是3的倍數
① int a = 10;
a %3 == 0 ?”就是3的倍數”:”不是”
②if(a %3 == 0 ){
System.out.println(”就是3的倍數”)
}else{
System.out.println(”不是3的倍數”);
}
3.小明java 考試成績 按等級分 A B C D ,判斷變數值在不同的範圍的,列印輸出不同的等級
90~100 A等。 80-89 B等。 70-79 C等。 60-69 D等。 60以下E等。
|
int score = 99;
if(score>=90 && score <=100){
}else if(score>=80 && scorce <90 ){
}else if(score>=70 && scorce <80 ){
}else if(score>=60 && scorce <70){
}else{
}
三、條件選擇結構-switch
作用和if差不多,只是語法結構不一致而已。
語法 :
switch(變數或者一個表示式){ case 變數的可能值1: 功能語句;break; case 變數的可能值2: 功能語句;break; case 變數的可能值3: 功能語句;break; ........ default:功能語句;break; }
|
示例 : 假設定義一個變量表示星期,然後使用switch結構,根據不同星期列印做不同的事情。
---------------------------------
特殊的一些情況:
1) case的順序(包括default) 可以是任意的, 但是建議先按照case的值的大小順序排列,default放最後
2) 執行順序,是先依次找完所有的case,如果都不匹配才會執行default
3) break的作用,結束當前的這個switch結構
-
- 從第一個匹配的條件開始,到第一個break之間的所有case判斷失效
- 在執行功能語句時,如果到末尾都沒有break,自動結束,不會再迴圈回去。
- 最後一個break 可以省略掉,但是建議還是寫上
- 再舉例 一個 列印 春夏秋冬的例子?
5) ase後面的值應該和變數的型別一致;
6) switch中的()中的變數地方型別可以是哪些?
java5之前 : byte short char int
java5支援 : enum列舉 (面向物件部分學習了之後回頭測試)
java7支援 : String 型別
四、迴圈的作用
- 每一天重複乾的事情?
睡覺 吃飯 耍朋友
- 比如酷狗音樂的播放模式?
單曲迴圈 列表迴圈
- 再比如說列印10句相同的內容?
Java中提供了3 種迴圈?
while do-while for
1.上面的3中迴圈功能都是一樣的,只是語法結構不一樣,很多時候是可以相互交換的, 既然都差不多,為什麼有多個呢?
不同的迴圈結構,有不同的使用場景和優勢
2.在寫迴圈程式碼之前呢?
1) 要做什麼事情
2) 次數
3) 要寫迴圈,必須知道迴圈的語法
五、while的基本用法
while
語法格式:
while(條件(布林型別的)){ // 迴圈體à具體做什麼事情 }
|
- 執行流程
1.一個迴圈可能會迴圈執行多次
第一次判斷條件true,繼續執行
第二次判斷條件true,繼續執行
第三次判斷條件true,繼續執行
。。。。。
直到第n次判斷條件false,終止迴圈
2.為什麼第一次 第二次是true 。。。 n次就是false?
- 條件可以是一個常量
舉個例子(條件為布林值true)
- 一般我們使用一個變數來充當條件迴圈,
舉個例子:播放一首歌,迴圈播放10次
1) 定義一個整數的變數記錄迴圈的次數
2) 迴圈一次,自增一次
3) 根據次數進行判斷
3.寫一段程式碼計算1-10的和。
1) 傳統的做法
1+2+3+4+5+6+7+8+9+10
如果要求計算1-100 , 1-1000 這樣寫是否合理?
可以動態的獲得每一個加數
2) 使用while迴圈,每迴圈一次,把取到的加數累加起來
3) 在迴圈的外面定義一個變數用來放計算的和的值
練習:
- 求出10以內2的倍數的數字 和 個數。
- 求出 1-10的所有偶數的和
六、do-while基本用法
l do-while 先執行一次,再判斷
語法格式:
do{ // 迴圈體 }while(條件); |
舉例:迴圈10次
- 和while區別?
1) 定義一個 布林變數,預設值false
2) 將這個布林變數放在 while 和 do-while 條件中,看有什麼區別