1 運算符
1.1 比較運算符
- 比較運算符的結果都是boolean類型,也即是要麼是true,要麼是false。
- 比較運算符"=="不能寫成"="。
- >
package java003; /** * 2017/8/31. * 說明: */ public class OperateDemo { public static void main(String[] args) { int a = 3; int b = 7; System.out.print(a>b);//false } }
- <
package java003; /** * 2017/8/31. * 說明: */ public class OperateDemo { public static void main(String[] args) { int a = 3; int b = 7; System.out.print(a<b);//true } }
- ==
package java003; /** * 2017/8/31. * 說明: */ public class OperateDemo { public static void main(String[] args) { int a = 3; int b = 7; System.out.print(a==b);//false } }
- !=
package java003; /** * 2017/8/31. * 說明: */ public class OperateDemo { public static void main(String[] args) { int a = 3; int b = 7; System.out.print(a!=b);//true } }
- >=
package java003; /** * 2017/8/31. * 說明: */ public class OperateDemo { public static void main(String[] args) { int a = 3; int b = 7; System.out.print(a>=b);//false } }
- <=
package java003; /** * 2017/8/31. * 說明: */ public class OperateDemo { public static void main(String[] args) { int a = 3; int b = 7; System.out.print(a<=b);//true } }
- instanceof
package java003; /** * 2017/8/31. * 說明: */ public class OperateDemo { public static void main(String[] args) { String str = "hello"; System.out.print(str instanceof String);//true } }
1.2 邏輯運算符
- &(與)、|(或)、!(非)、&&(短路與)、||(短路或)、^(異或)
- 邏輯運算符用於連接兩個boolean類型的表達式。
- 示例
package java003; /** * 2017/8/31. * 說明:邏輯運算符 */ public class OperateDemo2 { public static void main(String[] args) { int x = 3; System.out.print(x >= 2 && x <= 5); } }
- &的特點:
- 如下圖所示:表達式1&表達式2的結果。
表達式1 | 表達式2 | 結果 |
true | false | false |
true | true | true |
false | false | false |
false | true | false |
- &運算的規律:一假全假,全真爲真。
- |的特點
- 如下圖所示:表達式1|表達式2的結果。
表達式1 | 表達式2 | 結果 |
true | true | true |
true | false | true |
false | true | true |
false | false | false |
- |運算的規律:一真全真,全假才假。
- 示例:
package java003; /** * 2017/8/31. * 說明:邏輯運算符 */ public class OperateDemo2 { public static void main(String[] args) { int x = 5; System.out.print(x > 5 || x <6); } }
- !的特點
- 如下圖所示:!表達式
表達式 | 結果 |
true | false |
false | true |
- 非運算的規律:非假則真,非真則假。
- 示例:
package java003; /** * 2017/8/31. * 說明:邏輯運算符 */ public class OperateDemo2 { public static void main(String[] args) { int x = 5; System.out.print(x == 5); System.out.print(!(x==5)); } }
- ^
- 如下圖所示:表達式1^表達式2
表達式1 | 表達式2 | 結果 |
true | true | false |
false | true | true |
true | false | true |
true | true | true |
- 我們知道,在計算機中一般0表示false,1表示true,當然,需要聲明的是java中不是用0表示false,1表示true的,在java中,兩者不等價。
- 異或的規律:相同爲0,不同爲1。即異或左右兩邊的表達式,如果相同,就是false,不同,就是true。
package java003; /** * 2017/8/31. * 說明:邏輯運算符 */ public class OperateDemo2 { public static void main(String[] args) { System.out.print(true^true);//false System.out.print(true^false);//true System.out.print(false^true);//true System.out.print(false^false);//false } }
1.3 位運算符
- <<(左移)、>>(右移)、>>>(無符號右移)、&(與)、|(或)、^(異或)、~(反碼)
- 示例:6&3,int類型的數據在內存中是32位,此處爲了方便,就沒有畫32位了。
package java003; /** * 2017/8/31. * 說明:位運算符 */ public class OperateDemo3 { public static void main(String[] args) { int a = 6 ; int b = 3; System.out.print( a & b);//2 } }
- 示例:6 | 3
package java003; /** * 2017/8/31. * 說明:位運算符 */ public class OperateDemo3 { public static void main(String[] args) { int a = 6 ; int b = 3; System.out.print( a | b);//7 } }
- 示例:6^3
package java003; /** * 2017/8/31. * 說明:位運算符 */ public class OperateDemo3 { public static void main(String[] args) { int a = 6 ; int b = 3; System.out.print( a ^ b);//5 } }
- 示例:~3
package java003; /** * 2017/8/31. * 說明:位運算符 */ public class OperateDemo3 { public static void main(String[] args) { int b = 3; System.out.print( ~ b);//-4 } }
- 示例:3<<2 ,左移一位,乘以2。
package java003; /** * 2017/8/31. * 說明:位運算符 */ public class OperateDemo3 { public static void main(String[] args) { int b = 3; System.out.print( 3 << 2);//12 } }
- 示例:3 >>2 ,右移一位除以2,如果首個數字是0,則右移的時候,左邊空位補0,;如果首個數字是1,則右移的時候,左邊空位補1。因爲在計算機中0表示正數,1表示負數。
package java003; /** * 2017/8/31. * 說明:位運算符 */ public class OperateDemo3 { public static void main(String[] args) { int b = 3; System.out.print( b >> 2);//0 } }
- 示例:3 >>>2,不管首位是0還是1,在左邊空位都是補0。
package java003; /** * 2017/8/31. * 說明:位運算符 */ public class OperateDemo3 { public static void main(String[] args) { int b = 3; System.out.print( b >>> 2);//0 } }
- 面試題1:最有效率的方式算出2*8等於幾?
package java003; /** * 2017/8/31. * 說明:位運算符 */ public class OperateDemo3 { public static void main(String[] args) { System.out.print(2 << 3); } }
- 面試題2:對兩個整數變量的值進行交換(不需要第三變量)
- 思路①,有弊端,如果兩個整數的數值太大,會超出int範圍,會引起精度問題。
package java003; /** * 2017/8/31. * 說明:位運算符 */ public class OperateDemo3 { public static void main(String[] args) { int a = 2; int b = 3; a = a - b ; b = a + b; a = b - a; System.out.print("a="+a+",b="+b); } }
-
- 思路②
package java003; /** * 2017/8/31. * 說明:位運算符 */ public class OperateDemo3 { public static void main(String[] args) { int a = 2; int b = 3; a = a ^ b; b = a ^ b ; a = a ^ b; System.out.print("a="+a+",b="+b); } }
1.4 三元運算符
- 格式:
- (條件表達式) ? 表達式1 :表達式2;
- 如果條件表達式爲true,運算後的結果是表達式1,
- 如果條件表達式爲false,運算後的結果是表達式2。
- 示例:求兩個整數的最大值。
package java003; /** * 2017/9/1. * 說明:三元運算符 */ public class OperateDemo4 { public static void main(String[] args) { int a = 3; int b = 10; int c = (a >= b) ? a : b; System.out.print("最大值是:"+c); } }
2 程序的流程控制
- 程序的流程控制分爲:
- 順序結構
- 分支結構
- 循環結構
2.1 順序結構
- 示例:
package java003; import sun.applet.Main; /** * 2017/9/1. * 說明:順序結構 */ public class OperateDemo5 { public static void main(String[] args) { System.out.print("哈哈"); System.out.print("呵呵"); System.out.print("嘻嘻"); System.out.print("笨笨"); } }
2.2 分支語句
2.2.1 分支語句之if語句
- 格式1
if(條件表達式){ 執行語句; }
- 格式2
if(條件表達式){ 執行語句1; }else{ 執行語句2; }
- 格式3
if(條件表達式1){ 執行語句1; }else if(條件表達式2){ 執行語句2; }else{ 執行語句3; }
- 示例:
package java003; /** * 2017/9/1. * 說明:if */ public class IfDemo1 { public static void main(String[] args) { int x = 3; if(x > 1){ System.out.println("正確"); } System.out.println("結束"); } }
- 示例:
package java003; /** * 2017/9/1. * 說明:if */ public class IfDemo2 { public static void main(String[] args) { char gender = '男'; if(gender == '男'){ System.out.println("性別爲男"); }else{ System.out.println("性別爲女"); } } }
- 示例:
package java003; /** * 2017/9/1. * 說明:if */ public class IfDemo3 { public static void main(String[] args) { int x = 3; if(x >1){ System.out.print("a"); }else if(x >2){ System.out.print("b"); }else if(x >3){ System.out.print("c"); }else{ System.out.print("d"); } } }
- 練習一:用戶輸入指定的數字,然後輸出對應的星期幾?
package java003; /** * 2017/9/1. * 說明: */ public class IfTest1 { public static void main(String[] args) { int i = 5; if(i == 1){ System.out.print("星期一"); }else if(i == 2){ System.out.print("星期二"); }else if(i == 3){ System.out.print("星期三"); }else if(i == 4){ System.out.print("星期四"); }else if(i == 5){ System.out.print("星期五"); }else if(i == 6){ System.out.print("星期六"); }else if(i == 7){ System.out.print("星期日"); }else{ System.out.print("輸入錯誤"); } } }
- 練習二:根據指定月份,輸出對應的季節
package java003; /** * 2017/9/1. * 說明: */ public class IfTest2 { public static void main(String[] args) { int month = 3; if((month == 3) || (month == 4 )|| (month == 5)){ System.out.print("春季"); }else if((month == 6) || (month == 7 )|| (month == 8)){ System.out.print("夏季"); }else if((month == 9) || (month == 10 )|| (month == 11)){ System.out.print("秋季"); }else if((month == 12) || (month == 1 )|| (month == 2)){ System.out.print("冬季"); }else{ System.out.print("輸入錯誤"); } } }
2.2.2 分支語句之switch語句
- 格式
switch(表達式){ case 值1: 執行語句1; break; case 值2: 執行語句2; break; …… default: 執行語句n; break; }
-
- 說明:在JDK7之前,表達式可以是byte、short、int和char類型。在JDK7之後,支持String類型。
- 示例:
package java003; /** * 2017/9/1. * 說明:switch */ public class SwitchDemo { public static void main(String[] args) { int x = 3; switch (x){ case 1: System.out.print("x=1"); break; case 2: System.out.print("x=2"); break; case 3: System.out.print("x=3"); break; default: System.out.print("呵呵"); break; } } }
- 練習:根據數字輸出對應的星期幾?
package java003; /** * 2017/9/1. * 說明:輸入數字對應星期幾? */ public class SwitchTest { public static void main(String[] args) { int day = 3; switch (day){ case 1: System.out.print("星期一"); break; case 2: System.out.print("星期二"); break; case 3: System.out.print("星期三"); break; case 4: System.out.print("星期四"); break; case 5: System.out.print("星期五"); break; case 6: System.out.print("星期六"); break; case 7: System.out.print("星期七"); break; default: System.out.print("輸入錯誤"); break; } } }
2.2.3 if和switch的區別
- if
- ①對具體的值進行判斷。
- ②對區間進行判斷。
- ③對運算結果是boolean類型的表達式進行判斷。
- switch
- ①對具體的值進行判斷。
- ②值得個數是固定的。
2.3 循環結構
2.3.1 while循環
- 格式
while(條件表達式){ 執行語句; }
- 示例:
package java003; /** * 2017/9/1. * 說明:while */ public class WhileDemo { public static void main(String[] args) { int x = 1 ; while(x <= 3){ System.out.println("x="+x); x++; } } }
package java003; /** * 2017/9/1. * 說明:while */ public class WhileDemo { public static void main(String[] args) { int x = 1 ; while(x++ <= 3){ System.out.println("x="+x); } } }
- 練習:獲取1到10的和。
package java003; /** * 2017/9/1. * 說明:計算從1到10的和 */ public class WhileTest { public static void main(String[] args) { int sum = 0; int i = 1 ; while(i<= 10 ){ sum += i; i++; } System.out.println("1到10的和是:"+sum); } }
2.3.2 do-while循環
- 格式
do{ 執行語句; }while(條件表達式);
- 示例:
package java003; /** * 2017/9/1. * 說明: */ public class DoWhileDemo { public static void main(String[] args) { int x = 1; do{ System.out.println("x="+x); x++; }while(x <= 3); } }
- do-while語句的特點:無論條件是否滿足,循環體至少執行一次。
2.3.3 for循環
- 格式
for(表達式1;表達式2;表達式3){ 執行語句; }
- for循環的執行流程
- ①表達式1只讀一次,判斷表達式2,爲真就執行循環體,然後再執行表達式3,接着繼續判斷表達式2,重複整個過程,直到表達式2不成立爲止。
- ②for和while循環是可以互換的,區別在於for爲了循環而定義的變量在for循環結束後就在內存裏釋放,而while循環使用的變量在循環結束後還可以繼續使用。
- ③最簡單的無限循環:while(true){},for(;;){},無限循環存在的原因是並不知道循環多少次,而是根據某些條件,來控制循環(常見的是if和break搭配)。
- 示例:
package java003; /** * 2017/9/1. * 說明: */ public class ForDemo { public static void main(String[] args) { int sum = 0; for(int x = 1;x <= 10;x ++){ sum += x; } System.out.println("sum="+sum); } }
2.3.4 循環結構的應用場景
- 當對某些代碼執行很多次的時候,使用循環結構來完成。