03_运算符、键盘录入、流程控制
1:運算符(掌握)
2:鍵盤錄入(掌握)
3:流程控制語句
4:if語句(掌握)
1:運算符(掌握)
?(1)算術運算符
??A:+,-,*,/,%,++,--
??B:+的用法
???a:加法
???b:正號
???c:字符串連接符
??C:/和%的區別
???數據做除法操作的時候,/取得是商,%取得是余數
??D:++和--的用法
???a:他們的作用是自增或者自減
???b:使用
????**單獨使用
?????放在操作數據的前面和后面效果一樣。
?????a++或者++a效果一樣。
????**參與操作使用
?????放在操作數的前面:先自增或者自減,再參與操作
??????int a = 10;
??????int b = ++a;
?????放在操作數的后面:先參與操作,再自增或者自減
??????int a = 10;
??????int b = a++;
++,--運算符的使用:
+的用法:
1 /* 2 +的用法: 3 A:加法 4 B:正號 5 C:字符串連接符 6 */ 7 class OperatorDemo3 { 8 public static void main(String[] args) { 9 //加法 10 System.out.println(3+4); 11 12 //正號 13 System.out.println(+4); 14 15 System.out.println('a'); 16 System.out.println('a'+1); //這里是加法 17 18 //字符串連接符 19 System.out.println("hello"+'a'+1); 20 System.out.println('a'+1+"hello"); 21 } 22 }
++,--面試題:
(2)賦值運算符
??A:=,+=,-=,*=,/=,%=等
??B:=叫做賦值運算符,也是最基本的賦值運算符
???int x = 10; 把10賦值給int類型的變量x。
??C:擴展的賦值運算符的特點
???隱含了自動強制轉換。
???
???面試題:
????short s = 1;
????s = s + 1;
????
????short s = 1;
????s += 1;
????請問上面的代碼哪個有問題?
面試題:
1 /* 2 面試題: 3 short s=1;s = s+1; 4 5 short s=1;s+=1; 6 上面兩個代碼有沒有問題,如果有,那里有問題。 7 8 為什么第二個木有問題呢? 9 擴展的賦值運算符其實隱含了一個強制類型轉換。 10 11 s += 1; 12 不是等價于 s = s + 1; 13 而是等價于 s = (s的數據類型)(s + 1); 14 */ 15 class OperatorTest { 16 public static void main(String[] args) { 17 //short s = 1; 18 //s = s + 1; 19 //System.out.println(s); 20 21 short s = 1; 22 s += 1; //好像是 s = s + 1; 23 System.out.println(s); 24 } 25 }?(3)比較運算符
??A:==,!=,>,>=,<,<=
??B:無論運算符兩端簡單還是復雜最終結果是boolean類型。
??C:千萬不要把==寫成了=
?
1 /* 2 比較運算符: 3 ==,!=,>,>=,<,<= 4 5 特點: 6 無論你的操作是簡單還是復雜,結果是boolean類型。 7 8 注意事項: 9 "=="不能寫成"="。 10 */ 11 class OperatorDemo { 12 public static void main(String[] args) { 13 int x = 3; 14 int y = 4; 15 int z = 3; 16 17 System.out.println(x == y); 18 System.out.println(x == z); 19 System.out.println((x+y) == (x+z)); 20 System.out.println("------------"); 21 22 System.out.println(x != y); 23 System.out.println(x > y); 24 System.out.println(x >= y); 25 System.out.println(x < y); 26 System.out.println(x <= y); 27 System.out.println("------------"); 28 29 int a = 10; 30 int b = 20; 31 32 //boolean flag = (a == b); 33 //boolean flag = (a = b); //這個是有問題的,不兼容的類型 34 //System.out.println(flag); 35 36 int c = (a = b); //把b賦值給a,然后把a留下來 37 System.out.println(c); 38 } 39 }?(4)邏輯運算符
??A:&,|,^,!,&&,||
??B:邏輯運算符用于連接boolean類型的式子
??C:結論
???&:有false則false
???|:有true則true
???^:相同則false,不同則true。
????情侶關系。
???!:非true則false,非false則true
???
???&&:結果和&是一樣的,只不過有短路效果。左邊是false,右邊不執行。
???||:結果和|是一樣的,只不過有短路效果。左邊是true,右邊不執行。
&&與&以及 ||與|的區別:
(5)位運算符(了解)
??A:^的特殊用法
???一個數據針對另一個數據位異或兩次,該數不變
??B:面試題
???a:請實現兩個變量的交換
????**采用第三方變量
????**用位異或運算符
?????左邊a,b,a
?????右邊a^b
???b:請用最有效率的方式計算出2乘以8的結果
????2<<3
^運算符的特點:
移位運算符:
兩個數交換:
1 /* 2 面試題: 3 請自己實現兩個整數變量的交換 4 注意:以后講課的過程中,我沒有明確指定數據的類型,默認int類型。 5 */ 6 class OperatorTest { 7 public static void main(String[] args) { 8 int a = 10; 9 int b = 20; 10 11 System.out.println("a:"+a+",b:"+b); 12 13 //方式1:使用第三方變量(開發中用的) 14 /* 15 int c = a; 16 a = b; 17 b = c; 18 System.out.println("a:"+a+",b:"+b); 19 System.out.println("------------"); 20 */ 21 22 //方式2:用位異或實現(面試用) 23 //左邊:a,b,a 24 //右邊:a ^ b 25 /* 26 a = a ^ b; 27 b = a ^ b; //a ^ b ^ b = a 28 a = a ^ b; //a ^ b ^ a = b 29 System.out.println("a:"+a+",b:"+b); 30 */ 31 32 //方式3:用變量相加的做法 33 /* 34 a = a + b; //a=30 35 b = a - b; //b=10 36 a = a - b; //a=20 37 System.out.println("a:"+a+",b:"+b); 38 */ 39 40 //方式4:一句話搞定 41 b = (a+b) - (a=b); //b=30-20=10,a=20 42 System.out.println("a:"+a+",b:"+b); 43 } 44 }?
?
(6)三元運算符
??A:格式
???比較表達式?表達式1:表達式2;
??B:執行流程:
???首先計算比較表達式的值,看是true還是false。
???如果是true,表達式1就是結果。
???如果是false,表達式2就是結果。
??C:案例:
???a:比較兩個數據是否相等
???b:獲取兩個數據中的最大值
???c:獲取三個數據中的最大值
練習:
1 /* 2 練習: 3 獲取兩個整數中的最大值 4 獲取三個整數中的最大值 5 比較兩個整數是否相同 6 */ 7 class OperatorTest { 8 public static void main(String[] args) { 9 //獲取兩個整數中的最大值 10 int x = 100; 11 int y = 200; 12 13 int max = (x > y? x: y); 14 System.out.println("max:"+max); 15 System.out.println("--------"); 16 17 //獲取三個整數中的最大值 18 int a = 10; 19 int b = 30; 20 int c = 20; 21 22 //分兩步: 23 //A:先比較a,b的最大值 24 //B:拿a,b的最大值在和c進行比較 25 int temp = ((a > b)? a: b); 26 //System.out.println(temp); 27 int max1 = (temp > c? temp: c); 28 System.out.println("max1:"+max1); 29 30 //一步搞定 31 //int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c); 32 //這種做法不推薦。 33 //int max2 = a > b?a > c? a: c:b > c? b: c; 34 //System.out.println("max2:"+max2); 35 System.out.println("--------"); 36 37 //比較兩個整數是否相同 38 int m = 100; 39 int n = 200; 40 41 //boolean flag = (m == n)? true: false; 42 boolean flag = (m == n); 43 System.out.println(flag); 44 } 45 }2:鍵盤錄入(掌握)
?(1)實際開發中,數據是變化的,為了提高程序的靈活性,我們加入鍵盤錄入數據。
?(2)如何實現呢?目前就記住
??A:導包
???import java.util.Scanner;
???位置:在class的上邊
??B:創建對象
???Scanner sc = new Scanner(System.in);
??C:獲取數據
???int x = sc.nextInt();
?(3)把三元運算符的案例加入鍵盤錄入改進。
鍵盤錄入練習(一):
/*鍵盤錄入練習:鍵盤錄入兩個數據,并對這兩個數據求和,輸出其結果 */ import java.util.Scanner;class ScannerTest {public static void main(String[] args) {//鍵盤錄入兩個數據,并對這兩個數據求和,輸出其結果//創建鍵盤錄入對象Scanner sc = new Scanner(System.in);System.out.println("請輸入第一個數據:");int x = sc.nextInt();System.out.println("請輸入第二個數據:");int y = sc.nextInt();//把鍵盤錄入的數據進行相加即可int sum = (x + y);System.out.println("sum:"+sum);} }鍵盤錄入練習(二):
1 /* 2 鍵盤錄入練習:鍵盤錄入兩個數據,獲取這兩個數據中的最大值 3 */ 4 5 import java.util.Scanner; 6 7 class ScannerTest2 { 8 public static void main(String[] args) { 9 //創建鍵盤錄入對象 10 Scanner sc = new Scanner(System.in); 11 12 System.out.println("請輸入第一個數據:"); 13 int a = sc.nextInt(); 14 15 System.out.println("請輸入第二個數據:"); 16 int b = sc.nextInt(); 17 18 //獲取這兩個數據中的最大值 19 int max = (a > b? a: b); 20 System.out.println("max:"+max); 21 } 22 }
鍵盤練習(三):
3:流程控制語句
?(1)順序結構 從上往下,依次執行
?(2)選擇結構?按照不同的選擇,執行不同的代碼
?(3)循環結構 做一些重復的代碼
4:if語句(掌握)
?(1)三種格式
??A:格式1
???if(比較表達式) {
????語句體;
???}
???
???執行流程:
????判斷比較表達式的值,看是true還是false
????如果是true,就執行語句體
????如果是false,就不執行語句體
??
??B:格式2
???if(比較表達式) {
????語句體1;
???}else {
????語句體2;
???}
???
???執行流程:
????判斷比較表達式的值,看是true還是false
????如果是true,就執行語句體1
????如果是false,就執行語句體2
????
??C:格式3
???if(比較表達式1) {
????語句體1;
???}else if(比較表達式2){
????語句體2;
???}
???...
???else {
????語句體n+1;
???}
???
???執行流程:
????判斷比較表達式1的值,看是true還是false
????如果是true,就執行語句體1
????如果是false,就繼續判斷比較表達式2的值,看是true還是false
????如果是true,就執行語句體2
????如果是false,就繼續判斷比較表達式3的值,看是true還是false
????...
????如果都不滿足,就執行語句體n+1
?(2)注意事項
??A:比較表達式無論簡單還是復雜,結果是boolean類型
??B:if語句控制的語句體如果是一條語句,是可以省略大括號的;如果是多條,不能省略。
???建議:永遠不要省略。
??C:一般來說,有左大括號,就沒有分號,有分號,就沒有左大括號。
??D:else后面如果沒有if,是不會出現比較表達式的。
??E:三種if語句其實都是一個語句,只要有一個執行,其他的就不再執行。
?(3)案例:
??A:比較兩個數是否相等
??B:獲取兩個數中的最大值
??C:獲取三個數中的最大值(if語句的嵌套)
??D:根據成績輸出對應的等級
??E:根據月份,輸出對應的季節
??F:根據x計算對應y的值并輸出
?(4)三元運算符和if語句第二種格式的關系
??所有的三元運算符能夠實現的,if語句的第二種格式都能實現。
??反之不成立。
??
??如果if語句第二種格式控制的語句體是輸出語句,就不可以。
??因為三元運算符是一個運算符,必須要有一個結果返回,不能是一個輸出語句。
if語句注意事項:
1 /* 2 if語句的注意事項: 3 A:比較表達式無論簡單還是復雜,結果必須是boolean類型 4 B:if語句控制的語句體如果是一條語句,大括號可以省略; 5 如果是多條語句,就不能省略。建議永遠不要省略。 6 C:一般來說:有左大括號就沒有分號,有分號就沒有左大括號 7 */ 8 class IfDemo2 { 9 public static void main(String[] args) { 10 int x = 10; 11 12 if(x == 10) { 13 System.out.println("x等于10"); 14 } 15 16 if((x > 5) || (x == 10)) { 17 System.out.println("x大于或者等于10"); 18 } 19 System.out.println("-------------------"); 20 21 int a = 100; 22 23 /* 24 if(a == 100) { 25 System.out.println("a的值是100"); 26 } 27 */ 28 29 if(a != 100) { 30 System.out.println("a的值是100"); 31 System.out.println("over"); 32 } 33 System.out.println("-------------------"); 34 35 int b = 100; 36 if(b != 100); //這里其實是有語句體的,只不過是空語句體。 37 38 //代碼塊 39 { 40 System.out.println("b的值是100"); 41 System.out.println("over"); 42 } 43 } 44 }if語句格式2
1 /* 2 if語句格式2: 3 if(比較表達式) { 4 語句體1; 5 }else { 6 語句體2; 7 } 8 執行流程: 9 首先計算比較表達式的值,看其返回值是true還是false。 10 如果是true,就執行語句體1; 11 如果是false,就執行語句體2; 12 13 注意:else后面是沒有比較表達式的,只有if后面有。 14 */ 15 class IfDemo3 { 16 public static void main(String[] args) { 17 //判斷兩個數據是否相等 18 19 int a = 10; 20 int b = 20; 21 22 if(a == b) { 23 System.out.println("a等于b"); 24 }else { 25 System.out.println("a不等于b"); 26 } 27 } 28 }三元運算符與if格式2的區別:
1 /* 2 由于if語句的第二種格式剛才也完成了三元運算符可以完成的效果。 3 所以,我們就認為他們可以完成一樣的操作。 4 但是,他們就一點區別沒有嗎?肯定不是。 5 6 區別: 7 三元運算符實現的,都可以采用if語句實現。反之不成立。 8 9 什么時候if語句實現不能用三元改進呢? 10 當if語句控制的操作是一個輸出語句的時候就不能。 11 為什么呢?因為三元運算符是一個運算符,運算符操作完畢就應該有一個結果,而不是一個輸出。 12 */ 13 class IfDemo4 { 14 public static void main(String[] args) { 15 //獲取兩個數據的最大值 16 int a = 10; 17 int b = 20; 18 19 //用if語句實現 20 int max1; 21 if(a > b) { 22 max1 = a; 23 }else { 24 max1 = b; 25 } 26 System.out.println("max1:"+max1); 27 28 //用三元改進 29 int max2 = (a > b)? a: b; 30 System.out.println("max2:"+max2); 31 System.out.println("----------"); 32 33 //判斷一個數據是奇數還是偶數,并輸出是奇數還是偶數 34 int x = 100; 35 36 if(x%2 == 0) { 37 System.out.println("100是一個偶數"); 38 }else { 39 System.out.println("100是一個奇數"); 40 } 41 42 //用三元改進 43 //這種改進是錯誤的。 44 //String s = (x%2 == 0)?System.out.println("100是一個偶數");:System.out.println("100是一個奇數");; 45 } 46 }if語句格式3:
1 /* 2 由于if語句的第二種格式剛才也完成了三元運算符可以完成的效果。 3 所以,我們就認為他們可以完成一樣的操作。 4 但是,他們就一點區別沒有嗎?肯定不是。 5 6 區別: 7 三元運算符實現的,都可以采用if語句實現。反之不成立。 8 9 什么時候if語句實現不能用三元改進呢? 10 當if語句控制的操作是一個輸出語句的時候就不能。 11 為什么呢?因為三元運算符是一個運算符,運算符操作完畢就應該有一個結果,而不是一個輸出。 12 */ 13 class IfDemo4 { 14 public static void main(String[] args) { 15 //獲取兩個數據的最大值 16 int a = 10; 17 int b = 20; 18 19 //用if語句實現 20 int max1; 21 if(a > b) { 22 max1 = a; 23 }else { 24 max1 = b; 25 } 26 System.out.println("max1:"+max1); 27 28 //用三元改進 29 int max2 = (a > b)? a: b; 30 System.out.println("max2:"+max2); 31 System.out.println("----------"); 32 33 //判斷一個數據是奇數還是偶數,并輸出是奇數還是偶數 34 int x = 100; 35 36 if(x%2 == 0) { 37 System.out.println("100是一個偶數"); 38 }else { 39 System.out.println("100是一個奇數"); 40 } 41 42 //用三元改進 43 //這種改進是錯誤的。 44 //String s = (x%2 == 0)?System.out.println("100是一個偶數");:System.out.println("100是一個奇數");; 45 } 46 }if語句格式2練習:
1 /* 2 if語句格式2的練習: 3 A:獲取兩個數據中較大的值 4 B:判斷一個數據是奇數還是偶數,并輸出是奇數還是偶數 5 */ 6 import java.util.Scanner; 7 8 class IfTest { 9 public static void main(String[] args) { 10 //創建鍵盤錄入對象 11 Scanner sc = new Scanner(System.in); 12 13 //獲取兩個數據中較大的值 14 System.out.println("請輸入第一個數據:"); 15 int a = sc.nextInt(); 16 17 System.out.println("請輸入第二個數據:"); 18 int b = sc.nextInt(); 19 20 //定義一個變量接收最大值 21 int max; 22 23 if(a > b) { 24 max = a; 25 }else { 26 max = b; 27 } 28 29 System.out.println("max:"+max); 30 System.out.println("----------------"); 31 32 //判斷一個數據是奇數還是偶數 33 System.out.println("請輸入你要判斷的數據:"); 34 int x = sc.nextInt(); 35 36 if(x%2 == 0) { 37 System.out.println(x+"這個數據是偶數"); 38 }else { 39 System.out.println(x+"這個數據是奇數"); 40 } 41 } 42 }if語句格式3練習:
1 /* 2 三種if語句分別適合做什么事情呢? 3 格式1:適合做單個判斷 4 格式2:適合做兩個判斷 5 格式3:適合做多個判斷 6 7 需求: 8 鍵盤錄入x的值,計算出y的并輸出。 9 10 x>=3 y = 2x + 1; 11 -1<=x<3 y = 2x; 12 x<=-1 y = 2x – 1; 13 14 分析: 15 A:由于數據要鍵盤錄入,所以必須使用Scanner。 16 B:由于是三種判斷,所以我們選擇if語句格式3。 17 */ 18 import java.util.Scanner; 19 20 class IfTest2 { 21 public static void main(String[] args) { 22 //創建鍵盤錄入對象 23 Scanner sc = new Scanner(System.in); 24 25 System.out.println("請輸入x的值:"); 26 int x = sc.nextInt(); 27 28 //定義一個y 29 int y; 30 31 //用if語句格式3進行判斷 32 if(x >= 3) { 33 y = 2*x + 1; 34 }else if(x>=-1 && x<3) { 35 y = 2*x; 36 }else { 37 y = 2*x - 1; 38 } 39 40 System.out.println("y:"+y); 41 } 42 }鍵盤錄入月份的值,輸出對應的季節
1 /* 2 鍵盤錄入月份的值,輸出對應的季節。 3 4 春 3,4,5 5 夏 6,7,8 6 秋 9,10,11 7 冬 12,1,2 8 9 分析: 10 A:鍵盤錄入月份的值,所以我們要使用Scanner。 11 B:我們應該判斷這個月份在那個季節,而這個判斷情況較多,所以,用if語句格式3。 12 13 if語句的使用場景: 14 A:針對表達式是一個boolean類型的判斷 15 B:針對一個范圍的判斷 16 */ 17 import java.util.Scanner; 18 19 class IfTest3 { 20 public static void main(String[] args) { 21 //創建鍵盤錄入對象 22 Scanner sc = new Scanner(System.in); 23 24 //錄入數據 25 System.out.println("請你輸入一個月份:"); 26 int month = sc.nextInt(); 27 28 //第三種格式實現即可 29 if(month<1 || month>12) { 30 System.out.println("你輸入的月份有誤"); 31 }else if(month == 1) { 32 System.out.println("冬季"); 33 }else if(month == 2) { 34 System.out.println("冬季"); 35 }else if(month == 3) { 36 System.out.println("春季"); 37 }else if(month == 4) { 38 System.out.println("春季"); 39 }else if(month == 5) { 40 System.out.println("春季"); 41 }else if(month == 6) { 42 System.out.println("夏季"); 43 }else if(month == 7) { 44 System.out.println("夏季"); 45 }else if(month == 8) { 46 System.out.println("夏季"); 47 }else if(month == 9) { 48 System.out.println("秋季"); 49 }else if(month == 10) { 50 System.out.println("秋季"); 51 }else if(month == 11) { 52 System.out.println("秋季"); 53 }else { 54 System.out.println("冬季"); 55 } 56 System.out.println("--------------"); 57 58 //這個程序確實是符合了我們的需求,但是就是看起來比較麻煩 59 //那么,我們能不能改進一下呢? 60 //month == 3 61 //month == 4 62 //month == 5 63 //我們發現,上面三個都是春季。 64 //而他們本身每一個都是一個boolean表達式 65 //所以,我們就可以考慮使用邏輯運算符給他們連接起來改進 66 if(month<1 || month>12) { 67 System.out.println("你輸入的月份有誤"); 68 }else if(month==3 || month==4 || month==5) { 69 System.out.println("春季"); 70 }else if(month==6 || month==7 || month==8) { 71 System.out.println("夏季"); 72 }else if(month==9 || month==10 || month==11) { 73 System.out.println("秋季"); 74 }else { 75 System.out.println("冬季"); 76 } 77 System.out.println("--------------"); 78 79 //這個時候,程序代碼以及可以了。 80 //但是呢,假如我要求你輸入一個月份,判斷是上半年還是下半年。 81 //這個時候,我們的判斷條件連接就是6個boolean表達式 82 //我們可能還有更多的連接 83 //這個時候,其實我們還有另外的一種改進方案: 84 //month == 3 85 //month == 4 86 //month == 5 87 //month>=3 && month<=5 88 //用范圍也是可以改進的。 89 if(month<1 || month>12) { 90 System.out.println("你輸入的月份有誤"); 91 }else if(month>=3 && month<=5) { 92 System.out.println("春季"); 93 }else if(month>=6 && month<=8) { 94 System.out.println("夏季"); 95 }else if(month>=9 && month<=11) { 96 System.out.println("秋季"); 97 }else { 98 System.out.println("冬季"); 99 } 100 System.out.println("--------------"); 101 } 102 }獲取三個數據中的最大值:
1 /* 2 獲取三個數據中的最大值 3 4 由此案例主要是為了講解if語句是可以嵌套使用的。而且是可以任意的嵌套。 5 */ 6 class IfTest4 { 7 public static void main(String[] args) { 8 int a = 10; 9 int b = 30; 10 int c = 20; 11 12 //三元實現 13 //int temp = (a>b)? a: b; 14 //int max = (temp>c)? temp: c; 15 //System.out.println("max:"+max); 16 //System.out.println("--------"); 17 18 //用if語句實現 19 int max; 20 if(a > b) { 21 if(a > c) { 22 max = a; 23 }else { 24 max = c; 25 } 26 }else { 27 if(b > c) { 28 max = b; 29 }else { 30 max = c; 31 } 32 } 33 System.out.println("max:"+max); 34 } 35 }?
轉載于:https://www.cnblogs.com/super90/p/4660049.html
總結
以上是生活随笔為你收集整理的03_运算符、键盘录入、流程控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于dismissViewControl
- 下一篇: Linux系统之更改默认块大小