java 運算符,流程控制語句,鍵盤錄入
public static void main(String args[]) { int x = 3; int y = 4; int z = 5; System.out.println(x > y); System.out.println(x < y); System.out.println(x == y); System.out.println(x + y > x + z); System.out.println(x >= y); } 基本的比較運算符便是 大於,小於,等於,大於等於,小於等於, 輸出結果也是看是否符合比較,符合便輸出true,不符合編書處flase;
2.賦值運算符
public static void main(String args[]) { int a = 20; System.out.println(a); int b = 10; System.out.println(b); System.out.println("----------------"); int n; int m = n = 10; System.out.println((newStringBuilder("m:")).append(m).append(",n:").append(n).toString()); System.out.println("-----------------"); int y = 10; y += 20; System.out.println((new StringBuilder("y:")).append(y).toString()); } 賦值運算符“=” 註意賦值時和其他運算符之間的優先級; +++++++ 上述代碼中的 (1). new StringBuilder("內容 ")為匿名創建對象,而對象的內容便是雙引號中的內容; (2). append(" ")是附加的意思,append方法中如果是自定義變量,則不需要加雙引號,如果是字符串,則加雙引號;
(3). toString()這個方法它是一種對象類型,字符串,不可變的,StringBuilder帶有緩沖區,通過它,可改變字符串的這個不足的地方,如是我們用“+”來拼字符串,這個過程中,會創建很多個字符串對象,用StringBuilder,它就利用緩沖作用來完成這種工作,它與stringbuffer很類似,只是,它是線程非安全的,效率要比stringbuffer高些 ,在用append()附加字符串,最後最好使用toString()方法將其變成一個完整的字符串;
內容擴充:此時可以註意String類型,StringBuffer類型和StringBuilder類型的區別?
https://zhidao.baidu.com/question/1386767228469012700.html><br/<https://zhidao.baidu.com/question/2058150115619791027.html>
3.鍵盤錄入
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
System.out.println("請您輸入第一個數據:");
int num1 = sc.nextInt();
System.out.println("請您輸入第二個數據:");
int num2 = sc.nextInt();
int max = num1 <= num2 ? num2 : num1;
System.out.println((new StringBuilder("您輸入的最大值是:")).append(max).toString());
}
如上述代碼,先創建Scanner對象,創建對象時記得導入Java.util.Scanner包,因為只有導入這個包才可以創建Scanner對象,進而調用方法nextInt()獲取鍵盤錄入的內容;
nextInt()代表獲取輸入的Int型對象;
而代碼中int max = num1 <= num2 ? num2 : num1;
?:其實是一個三目運算符;
代表的意思是如果符合num1 <= num2,則輸出num2,否則輸出num1;輸出的順序看num2 : num1;如果想輸出最小數,為 int min = num1<=num2?num1:num2;
4.三目運算符
?:三目運算符,比較大小,類似於if(){}else{},如三所示
三目運算符比較兩數是否相等時
boolean flag = num1==num2?true:false;
改進後
boolean flag = num1==num2;即可
5.邏輯運算符
&和 | 既是邏輯運算符也是位運算符,而&&和||只是邏輯運算符。
同為邏輯運算符,他們的區別在哪裏??
(1)當&與&&同為邏輯運算符時,它們都用於連接兩個Boolean類型的表達式,當&和&&的兩端表達式同時為真時,表達式的結果為真,只要有一端為假,那麽表達式結果為假。從用法上來看,&和&&並沒有什麽區別,比如我們可以寫兩個表達式:
3>5&3>2; 3>5&&3>2;
兩個運算符都可以這麽用,但是不同的是,當在判斷這個表達式的真或假的時候,兩者的判斷次數不同;
當使用&運算符: 計算機在判斷表達式的值的時候,先判斷3>5 的值為假,然後再判斷3>2的結果為真,於是最後的結果是 假&真 為假;
但是當我們使用&&運算符的時候:計算機先判斷3>5 的值為假,此時表達式的結果一定為假,所以計算機就不再往下判斷了,判定表達式結果為假。
邏輯運算符&與&&的區別是:
& 無論左邊結果是什麽,右邊還是繼續運算;
&&當左邊為假,右邊不再進行運算。
但是兩者的結果是一樣的。
(2)當|和||的兩端表達式同時為假時,表達式的結果為假,只要有一端為真,那麽表達式結果為真。
所以同理,我們可以知道|與||的區別:
| 無論左邊結果是什麽,右邊還是繼續運算;
||當左邊為真,右邊不再進行運算。
但是兩者的結果是一樣的。
所以&&和||是比較高效一些;
如代碼所示:
public static void main(String args[])
{
int a = 3;
int b = 4;
int c = 5;
System.out.println(a > b & a > c);
System.out.println(a > b && a > c);
System.out.println(a < b && a > c);
System.out.println(a < b && a < c);
System.out.println("---------------------");
int x = 3;
int y = 4;
boolean b1 = ++x == 3 && y++ == 4;
System.out.println((new StringBuilder("x:")).append(x).toString());
System.out.println((new StringBuilder("y:")).append(y).toString());
System.out.println(b1);
}
輸出的前兩個雖然結果一樣,但是運行絕對不同;
!!!補充++x和x++的含義
++x會在本次運行中使x+1,進行改變;而x++則在本次運行中不改變;
如上述代碼;++x==3,則x=4; y++==4,則y還是4;
代碼迷茫癥狀易錯點:boolean b1 = 4&&4;應該為true,可為什麽運行結果為false?
其實是x=3,++x與3進行比較為false,所以結果為false;在這裏boolean b1 = ++x == 3 && y++ == 4;是個三目運算符,連接的是兩個boolean關系的表達式,雖然有&&,但是只能代表&&左邊右邊分別為一個boolean的表達式;
6.算術運算符
-
加 -減 *乘 /除 %除 ++ --
/和%的區別?
比如 int a = 3 ; int b = 4;
a/b=0; /代表取整數;
a%b=3; /代表取余數;如果要求出a/b的確切答案,最好定義int(整型)為double(雙精度型);如果定義的為int型,如上面運算,則進行強制轉換; 強制轉換為double: ((double)a*1.0d)/(double)b=0.75; 1.0d代表的對double的生命,不加也不會出錯,最好加上,而前面的(double)代表強制轉換為double類型; 如代碼所示: public static void main(String args[])
{
int x = 3; int y = 4; int m = x++; int n = y--; System.out.println((new StringBuilder("x:")).append(x).toString()); System.out.println((new StringBuilder("y:")).append(y).toString()); System.out.println((new StringBuilder("m:")).append(m).toString()); System.out.println((new StringBuilder("n:")).append(n).toString());
}
++x會在本次運行中使x+1,進行改變;而x++則在本次運行中不改變;
如上述代碼;++x==3,則x=4; y++==4,則y還是4;
則上述代碼輸出結果為 x:4 y:3 m:3 n:4
原因是x++ 中x並沒有先+,而是先給m賦值,所以m為3,之後x自行加1,則x為4,y同理.7.流程控制語句
(1)順序結構 從上往下,依次執行
(2)選擇結構 按照不同的選擇,執行不同的代碼
(3)循環結構 做一些重復的代碼if語句
**格式:
if(條件){滿足條件後的運行語句};(1)
else if(條件){滿足條件後的運行語句};(2)
else{不滿足上述條件的其他所有情況的運行語句};(3)
上述三行第一行單獨是一種格式,第一行和第三行合起來是一種格式,三行一起是一種格式;
註意點:
A:比較表達式無論簡單還是復雜,結果是boolean類型
B:if語句控制的語句體如果是一條語句,是可以省略大括號的;如果是多條,不能省略。
建議:永遠不要省略。
C:一般來說,有左大括號,就沒有分號,有分號,就沒有左大括號。
D:else後面如果沒有if,是不會出現比較表達式的。
E:三種if語句其實都是一個語句,只要有一個執行,其他的就不再執行。
**如果運行語句只有一句,可以不加{};
如代碼:
public static void main(String args[])
{
int x = 10;
if(x!=10)
System.out.println("x等於10");
if (x == 20)
System.out.println("x等於20");
System.out.println("over");
}
運行結果:over
**易錯點,小心;的添加,上述代碼,如果給if(x!=10)後面加; ,會出現如下情況
public static void main(String args[])
{
int x = 10;
if (x != 10);
System.out.println("x等於10");
if (x == 20)
System.out.println("x等於20");
System.out.println("over");
}
運算結果:x等於10 over
*為什麽?
此時的分號可以讓此次if語句無效,則會直接輸出,然後進入下次的if語句;
switch語句
**格式:
switch(表達式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
...
default:
語句體n+1;
break;
}
**格式解釋說明:
switch:說明這是switch語句。
表達式:可以是byte,short,int,char
JDK5以後可以是枚舉
JDK7以後可以是字符串
case:後面的值就是要和表達式進行比較的值
break:表示程序到這裏中斷,跳出switch語句
default:如果所有的情況都不匹配,就執行這裏,相當於if語句中的else
**小問題: switch語句的表達式可以是byte嗎?可以是long嗎?可以是String嗎?
可以,不可以,JDK7以後可以
**執行流程:
A:首先計算表達式的值
B:和每一個case進行匹配,如果有就執行對應的語句體,看到break就結束。
C:如果沒有匹配,就執行default的語句體n+1。
**註意事項:
A:case後面只能是常量,不能是變量,而且,多個case後面的值不能出現相同的
B:default可以省略嗎?
可以省略,但是不建議,因為它的作用是對不正確的情況給出提示。
特殊情況:
case就可以把值固定。
A,B,C,D
C:break可以省略嗎?
可以省略,但是結果可能不是我們想要的。
會出現一個現象:case穿透。
最終我們建議不要省略
D:default一定要在最後嗎?
不是,可以在任意位置。但是建議在最後。
E:switch語句的結束條件
a:遇到break就結束了
b:執行到末尾就結束了
****if語句和switch語句各自的場景
A:if
針對boolean類型的判斷
針對一個範圍的判斷
針對幾個常量的判斷
B:switch
針對幾個常量的判斷
**下面對循環語句做出解釋:
for,while,do...while
**for循環語句
A:格式
for(初始化語句;判斷條件語句;控制條件語句){
循環體語句;
}
**執行流程:
a:執行初始化語句
b:執行判斷條件語句
如果這裏是true,就繼續
如果這裏是false,循環就結束
c:執行循環體語句
d:執行控制條件語句
e:回到b
**B:註意事項
a:判斷條件語句無論簡單還是復雜,結果是boolean類型
b:循環體語句如果是一條,可以省略大括號,但是不建議
c:有分號就沒有左大括號,有左大括號就沒有分號
**while循環
**A:基本格式
while(判斷條件語句) {
循環體語句;
}
**擴展格式:
初始化語句;
while(判斷條件語句){
循環體語句;
控制條件語句;
}
通過查看這個格式,我們就知道while循環可以和for循環等價轉換。
**for和while的區別
**a:使用上的區別
for語句的那個控制條件變量,在循環結束後不能在使用了。
而while的可以繼續使用。
b:理解上的區別
for適合於一個範圍的判斷
while適合次數不明確的
**do...while循環
** A:基本格式
do {
循環體語句;
}while(判斷條件語句);
**擴展格式:
初始化語句;
do {
循環體語句;
控制條件語句;
}while(判斷條件語句);
通過查看格式,我們就可以看出其實三種循環的格式可以是統一的。
** B:三種循環的區別
a:do...while循環至少執行一次循環體
b:for和while必須先判斷條件是否是true,然後後才能決定是否執行循環體
**循環使用的註意事項(死循環)
A:一定要註意修改控制條件,否則容易出現死循環。
B:最簡單的死循環格式
a:while(true){...}
b:for(;;){}
java 運算符,流程控制語句,鍵盤錄入