Java的運(yùn)算符和程序邏輯控制你了解嗎
運(yùn)算符
運(yùn)算符,顧名思義就是用來(lái)執(zhí)行數(shù)學(xué)運(yùn)算的。在Java中運(yùn)算符可以分為:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、移位運(yùn)算符、條件運(yùn)算符等。
算術(shù)運(yùn)算符
基本四則運(yùn)算符(+ - * / %)
這里與C語(yǔ)言基本一致,但是還要記住的是:1. 都是二元運(yùn)算符,使用時(shí)必須要有左右兩個(gè)操作數(shù);2. int / int結(jié)果還是int類(lèi)型,而且會(huì)向下取整。
增量運(yùn)算符(+= -= *= /= %=)
這種類(lèi)型運(yùn)算符操作完成后,會(huì)將操縱的結(jié)果賦值給左操作數(shù)(與C語(yǔ)言類(lèi)似)。
注意:只有變量才能使用該運(yùn)算符,常量不能使用。
自增/自減運(yùn)算符(++ --)
這里也是和C語(yǔ)言相同的,前置++是先+1,然后再再使用變量+1之后的值;后置++是先使用變量原來(lái)的值,表達(dá)式結(jié)束時(shí)再給變量+1,前置--/后置--也是類(lèi)似的。
注意:只有變量才能使用自增/自減運(yùn)算符,常量是不能夠使用的,因?yàn)槌A渴遣辉试S被修改的。
關(guān)系運(yùn)算符
關(guān)系運(yùn)算符主要有以下幾個(gè):== != < > <= >=,他們?cè)谶M(jìn)行計(jì)算后會(huì)得出的結(jié)果是true/false(也就是布爾類(lèi)型)
其中有一點(diǎn)值得注意的是:當(dāng)需要進(jìn)行多次判斷的時(shí)候
public class TestDemo {
public static void main(String[] args) {
int a=4;
if(3<a<5){
System.out.println(a);
}
}
}是不能夠像上面的這段代碼那樣連著寫(xiě)的,這樣會(huì)報(bào)錯(cuò),而應(yīng)該像下面的代碼一樣:
public class TestDemo {
public static void main(String[] args) {
int a=4;
if(3<a&&a<5){
System.out.println(a);
}
}但是上面這段在Java中錯(cuò)誤的代碼,在C語(yǔ)言中卻不會(huì)報(bào)錯(cuò),在C語(yǔ)言中是會(huì)先判斷3是否小于a,發(fā)現(xiàn)確實(shí)是小于,澤會(huì)將其變?yōu)?,再判斷1是否小于5,發(fā)現(xiàn)是就直接執(zhí)行了這個(gè)if語(yǔ)句。但是計(jì)算機(jī)中這樣的執(zhí)行方式肯定是和我們?cè)镜囊庠甘遣环?,所以從這個(gè)方面又可以看出Java相對(duì)C語(yǔ)言安全性是更高的(因?yàn)镴ava在這個(gè)時(shí)候會(huì)就直接報(bào)錯(cuò))。
邏輯運(yùn)算符
邏輯運(yùn)算符在所有運(yùn)算符里面算得上是比較重點(diǎn)的,其中,邏輯運(yùn)算符主要有三個(gè):&& || !,其運(yùn)算結(jié)果都是布爾類(lèi)型(true/false)。
邏輯與(&&)
語(yǔ)法是:布爾表達(dá)式&&布爾表達(dá)式(注意:左右表達(dá)式應(yīng)該都是布爾類(lèi)型)
與C語(yǔ)言相同:
1. 只有兩個(gè)表達(dá)式都為真,結(jié)果才為真;兩表達(dá)式只要有一個(gè)是假,那結(jié)果就是假。
2. 遵循短路求值:如果左側(cè)表達(dá)式為假,那么結(jié)果就一定是假,不會(huì)計(jì)算右側(cè)的表達(dá)式。
與C語(yǔ)言不同:?jiǎn)渭兪褂?amp;時(shí),如果表達(dá)式結(jié)果為布爾類(lèi)型,也可以表示邏輯與,但是不會(huì)遵循短路求值。
public class TestDemo {
public static void main(String[] args) {
int a=10;
System.out.println(a>20 & a/0 == 0); //err
}
}邏輯或(||)
語(yǔ)法是:布爾表達(dá)式||布爾表達(dá)式(注意:左右表達(dá)式應(yīng)該都是布爾類(lèi)型)
與C語(yǔ)言相同:
1. 兩表達(dá)式只要有一個(gè)是真,那結(jié)果就是真;只有兩個(gè)表達(dá)式都為假,結(jié)果才為假。
2. 遵循短路求值:如果左側(cè)表達(dá)式為真,那么結(jié)果就一定是真,不會(huì)計(jì)算右側(cè)的表達(dá)式。
與C語(yǔ)言不同:?jiǎn)渭兪褂脇時(shí),如果表達(dá)式結(jié)果為布爾類(lèi)型,也可以表示邏輯或,但是不會(huì)遵循短路求值。
public class TestDemo {
public static void main(String[] args) {
int a=10;
System.out.println(a<20 | a/0 == 0); //err
}
}邏輯非(!)
語(yǔ)法是:!表達(dá)式
與C語(yǔ)言相同:真變假,假變真。
位運(yùn)算符
我們知道字節(jié)是最小的存儲(chǔ)單位,Java也不例外,在Java中數(shù)據(jù)存儲(chǔ)的最小單位是字節(jié),而數(shù)據(jù)操作的最小單位是比特位。其每個(gè)字節(jié)是由8個(gè)二進(jìn)制比特位組成的,多個(gè)字節(jié)組合在一起可以表示各種不同的數(shù)據(jù)。
位操作表示按二進(jìn)制位運(yùn)算。計(jì)算機(jī)中都是使用二進(jìn)制來(lái)表示數(shù)據(jù)的(01構(gòu)成的序列),按位運(yùn)算就是在按照二進(jìn)制位的每一位依次進(jìn)行計(jì)算。
位運(yùn)算符主要有以下四個(gè):& | ~ ^(其中除了~是一元運(yùn)算符以外,其余的都是二元運(yùn)算符)。這部分知識(shí)基本與C語(yǔ)言一模一樣(當(dāng)做鞏固,具體見(jiàn)之前文章或者題目)。
按位與(&)
兩個(gè)二進(jìn)制位都是1,則結(jié)果是1,否則結(jié)果為0(注意:只能是整數(shù)(int/short/long/byte)的時(shí)候)。
按位或(|)
兩個(gè)二進(jìn)制為都是0,則結(jié)果是0,否則結(jié)果為1(注意:只能是整數(shù)(int/short/long/byte)的時(shí)候)。
按位取反(~)
把所有二進(jìn)制位0轉(zhuǎn)為1,1轉(zhuǎn)為0。
按位異或(^)
兩個(gè)數(shù)字的二進(jìn)制相同,則結(jié)果為0;相異的結(jié)果則為1。
移位運(yùn)算
移位運(yùn)算符主要有三個(gè):<< >> >>>,且都是二元運(yùn)算符,都是按照二進(jìn)制比特位來(lái)運(yùn)算的。
左移(<<)
與C語(yǔ)言一樣:
1. 最左側(cè)位舍去,最右側(cè)補(bǔ)0(注意:左移時(shí),丟棄的是符號(hào)位,因此正數(shù)左移可能會(huì)變成負(fù)數(shù))。
2. 左移一位相當(dāng)于原數(shù)字*2;左移N位相當(dāng)于原數(shù)字*2的N次方。
右移(>>)
與C語(yǔ)言一樣:
1. 最右側(cè)位舍棄,最左側(cè)不符號(hào)位(正數(shù)補(bǔ)0,負(fù)數(shù)補(bǔ)1)。
2. 右移一位相當(dāng)于原數(shù)字/2;左移N位相當(dāng)于原數(shù)字/2的N次方。
無(wú)符號(hào)右移(>>>)
無(wú)符號(hào)右移在C語(yǔ)言中是沒(méi)有的,其作用是:最右側(cè)位舍棄,最左側(cè)補(bǔ)0。
小結(jié)
1. 進(jìn)行移位運(yùn)算相對(duì)于直接做乘除效率會(huì)高一些,所以當(dāng)某個(gè)代碼正好需要乘除2的N次方的時(shí)候就可以使用移位運(yùn)算。
2. 對(duì)負(fù)數(shù)進(jìn)行移位運(yùn)算,會(huì)得出向上取負(fù)數(shù)的整的值,導(dǎo)致其運(yùn)算的結(jié)果與直接做除法的結(jié)果不相同。
public class TestDemo {
public static void main(String[] args) {
System.out.println(-3>>1); //-2
System.out.println(-3/2); //-1
}
}條件運(yùn)算符
語(yǔ)法是:布爾表達(dá)式1?表達(dá)式2:表達(dá)式3(當(dāng)布爾表達(dá)式1的值為ture,整個(gè)表達(dá)式的值為表達(dá)式2的值;當(dāng)布爾表達(dá)式1的值為flase,整個(gè)表達(dá)式的值為表達(dá)式3的值)。
這是唯一的一個(gè)條件運(yùn)算符,也是唯一一個(gè)三目運(yùn)算符。
注意的點(diǎn):
1. 表達(dá)式2和表達(dá)式3的結(jié)果是要同類(lèi)型的,除非是能夠發(fā)生類(lèi)型隱式類(lèi)型轉(zhuǎn)換的。
2. 表達(dá)式是不能單獨(dú)存在的,其產(chǎn)生的結(jié)果必須要被使用。
程序邏輯控制
Java中程序的邏輯控制語(yǔ)句
分支語(yǔ)句
在Java中,分支語(yǔ)句有兩種:if語(yǔ)句和switch語(yǔ)句。大部分與C語(yǔ)言中的語(yǔ)法一樣(詳細(xì)可以看之前C語(yǔ)言文章),但是還有幾點(diǎn)需要注意:
1. 在if語(yǔ)句中的判斷表達(dá)式必須是布爾表達(dá)式
2. 懸垂else問(wèn)題也是和C語(yǔ)言一樣,匹配的是其最近的if
3. 在switch語(yǔ)句中,多個(gè)case后的常量值是不可以重復(fù)的
4. switch語(yǔ)句的括號(hào)內(nèi)只能是下面的幾種類(lèi)型:
(1)基本類(lèi)型:byte、char、short、int(注意不能是long類(lèi)型)
(2)引用類(lèi)型:String常量串、枚舉類(lèi)型
循環(huán)結(jié)構(gòu)
在Java中,循環(huán)語(yǔ)句有三種:while循環(huán)、for循環(huán)、do……while循環(huán)。大部分與C語(yǔ)言中的語(yǔ)法一樣(詳細(xì)可以看之前C語(yǔ)言文章),但是還有幾點(diǎn)需要注意:
1. 使用while循環(huán)的時(shí)候的循環(huán)條件必須是布爾類(lèi)型
2. 使用for循環(huán)的時(shí)候循環(huán)條件(也就是第二個(gè)表達(dá)式)也必須是布爾表達(dá)式
3. do while循環(huán)的循環(huán)條件也必須是布爾表達(dá)式且是在第一次執(zhí)行語(yǔ)句塊之后才進(jìn)行判斷
4. break的功能是讓循環(huán)提前結(jié)束
5. continue的功能是跳過(guò)本次循環(huán),立刻進(jìn)入下一次循環(huán)執(zhí)行
Java中的輸入輸出方式
輸出到控制臺(tái)
有以下這三種方法:
public class TestDemo {
public static void main(String[] args) {
System.out.println(10); //輸出帶換行
System.out.print(10); //輸出不換行
System.out.printf("%d",10); //格式化輸出
}
}從鍵盤(pán)輸入
1. 使用Scanner讀取字符串/整數(shù)/浮點(diǎn)數(shù)
案例1:
import java.util.Scanner;
public class TestDemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("請(qǐng)輸入姓名:");
String name=sc.nextLine();
System.out.print("請(qǐng)輸入年齡:");
int age=sc.nextInt();
System.out.print("請(qǐng)輸入工資:");
float money=sc.nextFloat();
System.out.println("信息如下:");
System.out.println("姓名:"+name+"\n"+"年齡:"+age+"\n"+"工資:"+money);
sc.close();
}
}2.使用Scanner循環(huán)讀取N個(gè)數(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. 當(dāng)循環(huán)輸入多個(gè)數(shù)據(jù)的時(shí)候,可以使用Ctrl+D來(lái)結(jié)束運(yùn)行
2. 當(dāng)使用完Scanner進(jìn)行輸入的時(shí)候,需要將其close掉
鞏固練習(xí)
下面引出一個(gè)猜數(shù)字游戲練習(xí)來(lái)鞏固程序邏輯控制。
系統(tǒng)自動(dòng)生成一個(gè)隨機(jī)數(shù)(1-100),輸入一個(gè)數(shù)字,如果輸入的數(shù)比該數(shù)小,則輸出“猜小了”;如果輸入的數(shù)比該數(shù)達(dá),則住處“猜大了”;否則輸出“猜對(duì)了”。
實(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();//在此處填值可以使這個(gè)隨機(jī)數(shù)一致都是同一個(gè)數(shù)
//int randNum=random.nextInt(100)+1;//1-100(方法一)
int randNum=(int)(Math.random()*100+1);//1-100(方法二)
while(true){
System.out.print("請(qǐng)輸入:");
int num=sc.nextInt();
if(num<randNum){
System.out.println("猜小了");
}else if(num>randNum){
System.out.println("猜大了");
}else{
System.out.print("猜對(duì)了");
break;
}
}
}
}總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java實(shí)現(xiàn)爬蟲(chóng)給App提供數(shù)據(jù)(Jsoup 網(wǎng)絡(luò)爬蟲(chóng))
這篇文章主要介紹了Java實(shí)現(xiàn)爬蟲(chóng)給App提供數(shù)據(jù),即Jsoup 網(wǎng)絡(luò)爬蟲(chóng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01
如何通過(guò)Java生成一個(gè)隨機(jī)數(shù)
當(dāng)我們需要在Java中生成隨機(jī)數(shù)時(shí),可以借助JDK中提供的Random類(lèi)來(lái)實(shí)現(xiàn),通過(guò)使用Random類(lèi),我們可以輕松地生成各種類(lèi)型的隨機(jī)數(shù),下面我們就來(lái)看看如何利用Random類(lèi)生成隨機(jī)數(shù)吧2023-09-09
Mybatis-plus一對(duì)多分頁(yè)數(shù)據(jù)條數(shù)不正確的處理
這篇文章主要介紹了Mybatis-plus一對(duì)多分頁(yè)數(shù)據(jù)條數(shù)不正確的處理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文標(biāo)點(diǎn)輸入無(wú)效的完美解決方法
Mac OS X 下基于 Java 的程序會(huì)出現(xiàn)中文標(biāo)點(diǎn)輸入無(wú)效的問(wèn)題,在中文輸入法狀態(tài),可以輸入中文字,但輸入中文標(biāo)點(diǎn)最后上去的是英文標(biāo)點(diǎn).這篇文章主要介紹了Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文標(biāo)點(diǎn)輸入無(wú)效的完美解決方法,需要的朋友可以參考下2016-10-10
MyBatisPlus使用${ew.customSqlSegment}別名問(wèn)題解決
在使用MyBatisPlus進(jìn)行連表查詢時(shí),可能遇到因${ew.customSqlSegment}無(wú)法加別名的問(wèn)題,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下2024-10-10
ssm項(xiàng)目改造spring?boot項(xiàng)目完整步驟
Spring?Boot現(xiàn)在已經(jīng)成為Java開(kāi)發(fā)領(lǐng)域的一顆璀璨明珠,它本身是包容萬(wàn)象的,可以跟各種技術(shù)集成,下面這篇文章主要給大家介紹了關(guān)于ssm項(xiàng)目改造spring?boot項(xiàng)目的相關(guān)資料,需要的朋友可以參考下2023-04-04
詳解idea maven nexus 常見(jiàn)命令配置
這篇文章主要介紹了idea maven nexus 常見(jiàn)命令配置的相關(guān)知識(shí),通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
mybatis分割字符串并循環(huán),實(shí)現(xiàn)in多個(gè)參數(shù)的操作
這篇文章主要介紹了mybatis分割字符串并循環(huán),實(shí)現(xiàn)in多個(gè)參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06

