JAVA基礎-3.運算子,鍵盤錄入,if語句
1:運算子(掌握) (1)算術運算子 A:+,-,*,/,%,++,– B:+的用法 a:加法 b:正號 c:字串連線符 C:/和%的區別 資料做除法操作的時候,/取得是商,%取得是餘數 D:++和–的用法 a:他們的作用是自增或者自減 b:使用 **單獨使用 放在操作資料的前面和後面效果一樣。 a++或者++a效果一樣。 **參與操作使用 放在運算元的前面:先自增或者自減,再參與操作 int a = 10; int b = ++a; a=11 b=11 放在運算元的後面:先參與操作,再自增或者自減 int a = 10; int b = a++; a=11 b=10
/* ++,–運算子的使用: 單獨使用: 放在運算元的前面和後面效果一樣。(這種用法是我們比較常見的) 參與運算使用: 放在運算元的前面,先自增或者自減,然後再參與運算。 放在運算元的後面,先參與運算,再自增或者自減。
作用:就是對變數進行自增1或者自減1。
*/ class OperatorDemo2 { public static void main(String[] args) { //定義兩個變數 int x = 3; int y = 4;
//字串的拼接 //System.out.println("x:"+x); //System.out.println("y:"+y); System.out.println("x:"+x+",y:"+y); //單獨使用 //x++; //y--; ++x; --y; //System.out.println(x); System.out.println("x:"+x+",y:"+y); //意外的型別,常量是不可以這樣做的 //System.out.println(10++); System.out.println("-------------------"); //參與運算使用 int a = 3; int b = 4; //int c = a++; //int d = b--; int c = ++a; int d = --b; System.out.println("a:"+a); //4, 4 System.out.println("b:"+b); //3, 3 System.out.println("c:"+c); //3, 4 System.out.println("d:"+d); //4, 3 }
}
(2)賦值運算子
A:=,+=,-=,*=,/=,%=等
B:=叫做賦值運算子,也是最基本的賦值運算子
int x = 10; 把10賦值給int型別的變數x。
C:擴充套件的賦值運算子的特點
隱含了自動強制轉換。
面試題:
/* 面試題: short s=1;s = s+1;
short s=1;s+=1;
上面兩個程式碼有沒有問題,如果有,那裡有問題。
為什麼第二個木有問題呢?
擴充套件的賦值運算子其實隱含了一個強制型別轉換。
s += 1;
不是等價於 s = s + 1;
而是等價於 s = (s的資料型別)(s + 1);
*/ class OperatorTest { public static void main(String[] args) { //short s = 1; //s = s + 1; //System.out.println(s);
short s = 1;
s += 1; //好像是 s = s + 1;
System.out.println(s);
}
}
(3)比較運算子
A:==,!=,>,>=,<,<=
B:無論運算子兩端簡單還是複雜最終結果是boolean型別。
C:千萬不要把==寫成了=
(4)邏輯運算子
A:&,|,^,!,&&,||
B:邏輯運算子用於連線boolean型別的式子
C:結論
&邏輯與:有false則false
|邏輯或:有true則true
^邏輯異或:相同則false,不同則true。
情侶關係。男男,男女,女男,女女
!邏輯非:非true則false,非false則true
特點:偶數個不改變本身。
&&:結果和&是一樣的,只不過有短路效果。左邊是false,右邊不執行。
||:結果和|是一樣的,只不過有短路效果。左邊是true,右邊不執行。
(5)位運算子(瞭解)
A:^的特殊用法
一個數據針對另一個數據位異或兩次,該數不變
int a = 10;
int b = 20;
System.out.println(a ^ b ^ b); //10
System.out.println(a ^ b ^ a); //20
B:面試題
a:請實現兩個變數的交換
**採用第三方變數
**用位異或運算子
左邊a,b,a
右邊a^b
/* 面試題: 請自己實現兩個整數變數的交換 */ class OperatorTest { public static void main(String[] args) { int a = 10; int b = 20;
System.out.println("a:"+a+",b:"+b);
//方式1:使用第三方變數(開發中用的)
/*
int c = a;
a = b;
b = c;
System.out.println("a:"+a+",b:"+b);
System.out.println("------------");
*/
//方式2:用位異或實現(面試用)
//左邊:a,b,a
//右邊:a ^ b
/*
a = a ^ b;
b = a ^ b; //a ^ b ^ b = a
a = a ^ b; //a ^ b ^ a = b
System.out.println("a:"+a+",b:"+b);
*/
//方式3:用變數相加的做法
/*
a = a + b; //a=30
b = a - b; //b=10
a = a - b; //a=20
System.out.println("a:"+a+",b:"+b);
*/
//方式4:一句話搞定
b = (a+b) - (a=b); //b=30-20=10,a=20
System.out.println("a:"+a+",b:"+b);
}
}
b:請用最有效率的方式計算出2乘以8的結果
2<<3
(6)三元運算子
A:格式
比較表示式?表示式1:表示式2;
B:執行流程:
首先計算比較表示式的值,看是true還是false。
如果是true,表示式1就是結果。
如果是false,表示式2就是結果。
C:案例:
a:比較兩個資料是否相等
b:獲取兩個資料中的最大值 return ((a>b)? a : b);
c:獲取三個資料中的最大值 int temp = ((a>b)? a: b);
int max = ((temp>c)? temp: c);
return max;
/* 練習: 獲取兩個整數中的最大值 獲取三個整數中的最大值 比較兩個整數是否相同 */ class OperatorTest { public static void main(String[] args) { //獲取兩個整數中的最大值 int x = 100; int y = 200;
int max = (x > y? x: y);
System.out.println("max:"+max);
System.out.println("--------");
//獲取三個整數中的最大值
int a = 10;
int b = 30;
int c = 20;
//分兩步:
//A:先比較a,b的最大值
//B:拿a,b的最大值在和c進行比較
int temp = ((a > b)? a: b);
//System.out.println(temp);
int max1 = (temp > c? temp: c);
System.out.println("max1:"+max1);
//一步搞定
//int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c);
//這種做法不推薦。
//int max2 = a > b?a > c? a: c:b > c? b: c;
//System.out.println("max2:"+max2);
System.out.println("--------");
//比較兩個整數是否相同
int m = 100;
int n = 200;
//boolean flag = (m == n)? true: false;
boolean flag = (m == n);
System.out.println(flag);
}
}
2:鍵盤錄入(掌握) (1)實際開發中,資料是變化的,為了提高程式的靈活性,我們加入鍵盤錄入資料。 (2)如何實現呢?目前就記住 A:導包 import java.util.Scanner; 位置:在class的上邊 B:建立物件 Scanner sc = new Scanner(System.in); C:獲取資料 int x = sc.nextInt();
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的值並輸出
/* 獲取三個資料中的最大值
由此案例主要是為了講解if語句是可以巢狀使用的。而且是可以任意的巢狀。
*/ class IfTest4 { public static void main(String[] args) { int a = 10; int b = 30; int c = 20;
//三元實現
//int temp = (a>b)? a: b;
//int max = (temp>c)? temp: c;
//System.out.println("max:"+max);
//System.out.println("--------");
//用if語句實現
int max;
if(a > b) {
if(a > c) {
max = a;
}else {
max = c;
}
}else {
if(b > c) {
max = b;
}else {
max = c;
}
}
System.out.println("max:"+max);
}
}
(4)三元運算子和if語句第二種格式的關係
所有的三元運算子能夠實現的,if語句的第二種格式都能實現。
反之不成立。
如果if語句第二種格式控制的語句體是輸出語句,就不可以。
因為三元運算子是一個運算子,必須要有一個結果返回,不能是一個輸出語句。