Java的運算符和程序邏輯控制你了解嗎
運算符
運算符,顧名思義就是用來執(zhí)行數(shù)學運算的。在Java中運算符可以分為:算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符、移位運算符、條件運算符等。
算術(shù)運算符
基本四則運算符(+ - * / %)
這里與C語言基本一致,但是還要記住的是:1. 都是二元運算符,使用時必須要有左右兩個操作數(shù);2. int / int結(jié)果還是int類型,而且會向下取整。
增量運算符(+= -= *= /= %=)
這種類型運算符操作完成后,會將操縱的結(jié)果賦值給左操作數(shù)(與C語言類似)。
注意:只有變量才能使用該運算符,常量不能使用。
自增/自減運算符(++ --)
這里也是和C語言相同的,前置++是先+1,然后再再使用變量+1之后的值;后置++是先使用變量原來的值,表達式結(jié)束時再給變量+1,前置--/后置--也是類似的。
注意:只有變量才能使用自增/自減運算符,常量是不能夠使用的,因為常量是不允許被修改的。
關(guān)系運算符
關(guān)系運算符主要有以下幾個:== != < > <= >=,他們在進行計算后會得出的結(jié)果是true/false(也就是布爾類型)
其中有一點值得注意的是:當需要進行多次判斷的時候
public class TestDemo { public static void main(String[] args) { int a=4; if(3<a<5){ System.out.println(a); } } }
是不能夠像上面的這段代碼那樣連著寫的,這樣會報錯,而應(yīng)該像下面的代碼一樣:
public class TestDemo { public static void main(String[] args) { int a=4; if(3<a&&a<5){ System.out.println(a); } }
但是上面這段在Java中錯誤的代碼,在C語言中卻不會報錯,在C語言中是會先判斷3是否小于a,發(fā)現(xiàn)確實是小于,澤會將其變?yōu)?,再判斷1是否小于5,發(fā)現(xiàn)是就直接執(zhí)行了這個if語句。但是計算機中這樣的執(zhí)行方式肯定是和我們元本的意愿是不符符,所以從這個方面又可以看出Java相對C語言安全性是更高的(因為Java在這個時候會就直接報錯)。
邏輯運算符
邏輯運算符在所有運算符里面算得上是比較重點的,其中,邏輯運算符主要有三個:&& || !,其運算結(jié)果都是布爾類型(true/false)。
邏輯與(&&)
語法是:布爾表達式&&布爾表達式(注意:左右表達式應(yīng)該都是布爾類型)
與C語言相同:
1. 只有兩個表達式都為真,結(jié)果才為真;兩表達式只要有一個是假,那結(jié)果就是假。
2. 遵循短路求值:如果左側(cè)表達式為假,那么結(jié)果就一定是假,不會計算右側(cè)的表達式。
與C語言不同:單純使用&時,如果表達式結(jié)果為布爾類型,也可以表示邏輯與,但是不會遵循短路求值。
public class TestDemo { public static void main(String[] args) { int a=10; System.out.println(a>20 & a/0 == 0); //err } }
邏輯或(||)
語法是:布爾表達式||布爾表達式(注意:左右表達式應(yīng)該都是布爾類型)
與C語言相同:
1. 兩表達式只要有一個是真,那結(jié)果就是真;只有兩個表達式都為假,結(jié)果才為假。
2. 遵循短路求值:如果左側(cè)表達式為真,那么結(jié)果就一定是真,不會計算右側(cè)的表達式。
與C語言不同:單純使用|時,如果表達式結(jié)果為布爾類型,也可以表示邏輯或,但是不會遵循短路求值。
public class TestDemo { public static void main(String[] args) { int a=10; System.out.println(a<20 | a/0 == 0); //err } }
邏輯非(!)
語法是:!表達式
與C語言相同:真變假,假變真。
位運算符
我們知道字節(jié)是最小的存儲單位,Java也不例外,在Java中數(shù)據(jù)存儲的最小單位是字節(jié),而數(shù)據(jù)操作的最小單位是比特位。其每個字節(jié)是由8個二進制比特位組成的,多個字節(jié)組合在一起可以表示各種不同的數(shù)據(jù)。
位操作表示按二進制位運算。計算機中都是使用二進制來表示數(shù)據(jù)的(01構(gòu)成的序列),按位運算就是在按照二進制位的每一位依次進行計算。
位運算符主要有以下四個:& | ~ ^(其中除了~是一元運算符以外,其余的都是二元運算符)。這部分知識基本與C語言一模一樣(當做鞏固,具體見之前文章或者題目)。
按位與(&)
兩個二進制位都是1,則結(jié)果是1,否則結(jié)果為0(注意:只能是整數(shù)(int/short/long/byte)的時候)。
按位或(|)
兩個二進制為都是0,則結(jié)果是0,否則結(jié)果為1(注意:只能是整數(shù)(int/short/long/byte)的時候)。
按位取反(~)
把所有二進制位0轉(zhuǎn)為1,1轉(zhuǎn)為0。
按位異或(^)
兩個數(shù)字的二進制相同,則結(jié)果為0;相異的結(jié)果則為1。
移位運算
移位運算符主要有三個:<< >> >>>,且都是二元運算符,都是按照二進制比特位來運算的。
左移(<<)
與C語言一樣:
1. 最左側(cè)位舍去,最右側(cè)補0(注意:左移時,丟棄的是符號位,因此正數(shù)左移可能會變成負數(shù))。
2. 左移一位相當于原數(shù)字*2;左移N位相當于原數(shù)字*2的N次方。
右移(>>)
與C語言一樣:
1. 最右側(cè)位舍棄,最左側(cè)不符號位(正數(shù)補0,負數(shù)補1)。
2. 右移一位相當于原數(shù)字/2;左移N位相當于原數(shù)字/2的N次方。
無符號右移(>>>)
無符號右移在C語言中是沒有的,其作用是:最右側(cè)位舍棄,最左側(cè)補0。
小結(jié)
1. 進行移位運算相對于直接做乘除效率會高一些,所以當某個代碼正好需要乘除2的N次方的時候就可以使用移位運算。
2. 對負數(shù)進行移位運算,會得出向上取負數(shù)的整的值,導致其運算的結(jié)果與直接做除法的結(jié)果不相同。
public class TestDemo { public static void main(String[] args) { System.out.println(-3>>1); //-2 System.out.println(-3/2); //-1 } }
條件運算符
語法是:布爾表達式1?表達式2:表達式3(當布爾表達式1的值為ture,整個表達式的值為表達式2的值;當布爾表達式1的值為flase,整個表達式的值為表達式3的值)。
這是唯一的一個條件運算符,也是唯一一個三目運算符。
注意的點:
1. 表達式2和表達式3的結(jié)果是要同類型的,除非是能夠發(fā)生類型隱式類型轉(zhuǎn)換的。
2. 表達式是不能單獨存在的,其產(chǎn)生的結(jié)果必須要被使用。
程序邏輯控制
Java中程序的邏輯控制語句
分支語句
在Java中,分支語句有兩種:if語句和switch語句。大部分與C語言中的語法一樣(詳細可以看之前C語言文章),但是還有幾點需要注意:
1. 在if語句中的判斷表達式必須是布爾表達式
2. 懸垂else問題也是和C語言一樣,匹配的是其最近的if
3. 在switch語句中,多個case后的常量值是不可以重復的
4. switch語句的括號內(nèi)只能是下面的幾種類型:
(1)基本類型:byte、char、short、int(注意不能是long類型)
(2)引用類型:String常量串、枚舉類型
循環(huán)結(jié)構(gòu)
在Java中,循環(huán)語句有三種:while循環(huán)、for循環(huán)、do……while循環(huán)。大部分與C語言中的語法一樣(詳細可以看之前C語言文章),但是還有幾點需要注意:
1. 使用while循環(huán)的時候的循環(huán)條件必須是布爾類型
2. 使用for循環(huán)的時候循環(huán)條件(也就是第二個表達式)也必須是布爾表達式
3. do while循環(huán)的循環(huán)條件也必須是布爾表達式且是在第一次執(zhí)行語句塊之后才進行判斷
4. break的功能是讓循環(huán)提前結(jié)束
5. continue的功能是跳過本次循環(huán),立刻進入下一次循環(huán)執(zhí)行
Java中的輸入輸出方式
輸出到控制臺
有以下這三種方法:
public class TestDemo { public static void main(String[] args) { System.out.println(10); //輸出帶換行 System.out.print(10); //輸出不換行 System.out.printf("%d",10); //格式化輸出 } }
從鍵盤輸入
1. 使用Scanner讀取字符串/整數(shù)/浮點數(shù)
案例1:
import java.util.Scanner; public class TestDemo { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.print("請輸入姓名:"); String name=sc.nextLine(); System.out.print("請輸入年齡:"); int age=sc.nextInt(); System.out.print("請輸入工資:"); float money=sc.nextFloat(); System.out.println("信息如下:"); System.out.println("姓名:"+name+"\n"+"年齡:"+age+"\n"+"工資:"+money); sc.close(); } }
2.使用Scanner循環(huán)讀取N個數(shù)字
案例2:
import java.util.Scanner; public class TestDemo { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNextInt()){ int num=sc.nextInt(); System.out.println(num); } } }
注意:
1. 當循環(huán)輸入多個數(shù)據(jù)的時候,可以使用Ctrl+D來結(jié)束運行
2. 當使用完Scanner進行輸入的時候,需要將其close掉
鞏固練習
下面引出一個猜數(shù)字游戲練習來鞏固程序邏輯控制。
系統(tǒng)自動生成一個隨機數(shù)(1-100),輸入一個數(shù)字,如果輸入的數(shù)比該數(shù)小,則輸出“猜小了”;如果輸入的數(shù)比該數(shù)達,則住處“猜大了”;否則輸出“猜對了”。
實現(xiàn)代碼:
import java.util.Random; import java.util.Scanner; public class TestDemo { public static void main(String[] args) { Scanner sc=new Scanner(System.in); Random random=new Random();//在此處填值可以使這個隨機數(shù)一致都是同一個數(shù) //int randNum=random.nextInt(100)+1;//1-100(方法一) int randNum=(int)(Math.random()*100+1);//1-100(方法二) while(true){ System.out.print("請輸入:"); int num=sc.nextInt(); if(num<randNum){ System.out.println("猜小了"); }else if(num>randNum){ System.out.println("猜大了"); }else{ System.out.print("猜對了"); break; } } } }
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Springboot?配置線程池創(chuàng)建線程及配置?@Async?異步操作線程池詳解
這篇文章主要介紹了Springboot?配置線程池創(chuàng)建線程及配置?@Async?異步操作線程池詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09Springboot集成阿里云OSS上傳文件系統(tǒng)教程
這篇文章主要介紹了Springboot集成阿里云OSS上傳文件系統(tǒng)教程,通過詳細的圖文展示,代碼步驟的展示和文件配置信息,希望對你有所幫助2021-06-06Java實現(xiàn)將PDF轉(zhuǎn)為PDF/A
通過將PDF格式轉(zhuǎn)換為PDF/A格式,可保護文檔布局、格式、字體、大小等不受更改,從而實現(xiàn)文檔安全保護的目的,同時又能保證文檔可讀、可訪問。本文將為大家介紹如何實現(xiàn)這一轉(zhuǎn)換,需要的可以參考一下2022-01-01