順序結(jié)構(gòu)沒什么好講的,就是從上到下的寫代碼,所以接下來,壹哥就直接帶各位來學(xué)習(xí)分支結(jié)構(gòu)里的條件分支。我們在前面說過,分支結(jié)構(gòu),或者叫做條件分支,其實有兩種情況。一種是if...else...類型的條件分支,一種是switch...case...類型的條件分支,今天我們先來學(xué)習(xí)if和else的使用。
1. if基本語法
在Java代碼中,如果我們要根據(jù)某個條件來決定是否執(zhí)行一段代碼,就可以考慮使用if語句。if語句的基本語法是:
if(條件表達(dá)式){ //滿足條件時要執(zhí)行的語句 }
在上面的語法中,會根據(jù)if(條件表達(dá)式)里的計算結(jié)果(true或者false),由JVM決定是否執(zhí)行{}里的代碼塊。如果為true,就執(zhí)行,否則就不執(zhí)行。
2. if的單分支語句
首先我們通過一個簡單的需求,來學(xué)習(xí)if的單分支語句。所謂的單分支語句,就是說只有一種判斷情況,條件為真就執(zhí)行,否則就不執(zhí)行。比如這個需求:“如果你年滿18歲,就可以攢勁的節(jié)目”。
publicclassDemo01 { publicstaticvoidmain(String[] args) { // if語句 //案例1:如果年齡大于等于18歲,就可以看攢勁的節(jié)目了 System.out.println("請輸入你的年齡"); //獲取Scanner對象 Scanner sc=new Scanner(System.in); //獲取年齡 int age = sc.nextInt(); //如果語句塊{}里面只有一條執(zhí)行語句,{}可以省略,但建議保留。 if(age >= 18){ System.out.println("本節(jié)目只對成年人開放,未成年人請在父母陪同下觀看,節(jié)目正在緩沖......"); } //案例2:如果身高大于180,且體重小于180,就可以當(dāng)模特 System.out.println("請輸入你的身高"); int height = sc.nextInt(); System.out.println("請輸入你的體重"); int weight = sc.nextInt(); //條件表達(dá)式中,可以結(jié)合之前學(xué)習(xí)過的邏輯運算符//采用短路與&&,提高效率 if(height > 180 && weight < 180){ System.out.println("恭喜你,可以當(dāng)模特了"); } } }
另外如果{}語句塊里面只有一條執(zhí)行語句,{}可以省略,但建議保留。因為如果我們采用縮進(jìn)的格式,很容易把后面的語句都看成是if語句的執(zhí)行塊,所以不推薦忽略花括號的寫法。
單分支語句應(yīng)對的情況是很簡單的,在實際開發(fā)中可能會很復(fù)雜,這就需要使用多分支語句來進(jìn)行處理。
3. if的多分支語句
3.1 if...else結(jié)構(gòu)
if...else...結(jié)構(gòu)會根據(jù)條件表達(dá)式的結(jié)果進(jìn)行判斷,當(dāng)表達(dá)式的結(jié)果為true,則執(zhí)行語句塊A;否則執(zhí)行else后面的語句塊B。基本語法結(jié)構(gòu)如下:
if(邏輯條件){ //滿足邏輯條件執(zhí)行的代碼 }else{ //不滿足邏輯條件執(zhí)行的代碼 }
案例如下:
publicclassDemo01 { publicstaticvoidmain(String[] args) { // if多分支語句 Scanner sc=new Scanner(System.in); //案例:如果用戶名為admin、密碼為123456,就跳轉(zhuǎn)到首頁,否則跳轉(zhuǎn)到登錄頁面 System.out.println("請輸入用戶名"); String username = sc.next(); System.out.println("請輸入密碼"); String password = sc.next(); //equals()比較方法 if("admin".equals(username) && "123456".equals(password)){ System.out.println("跳轉(zhuǎn)首頁"); }else{ System.out.println("跳轉(zhuǎn)登錄頁面"); } } }
我們要注意,在java中,"=="比較的是兩個對象的內(nèi)存地址是否相同,String類中的equals()方法比較的是內(nèi)容是否相同。如果是基本數(shù)據(jù)類型,我們可以使用==進(jìn)行比較;而對于String字符串,一般是使用equals()方法進(jìn)行比較。
另外我們在使用equals()方法進(jìn)行比較時,要采用類似"admin".equals(username)的寫法,而不要采用username.equals("admin")的寫法。因為username對象的值有可能為null,這樣就可能會產(chǎn)生NullPointerException異常。
3.2 if多分支
if多分支就是可以利用多個if ... else if ...else...進(jìn)行串聯(lián)。多分支可以根據(jù)多個條件表達(dá)式的結(jié)果進(jìn)行判斷:
● 如果條件表達(dá)式1的結(jié)果為true,則執(zhí)行語句塊1;否則去判斷條件表達(dá)式2;
● 如果條件表達(dá)式2的結(jié)果為true,則執(zhí)行語句塊2,否則去判斷條件表達(dá)式3;
● ....
● 如果所有的條件表達(dá)式結(jié)果都為false,則執(zhí)行語句塊N+1;
● else是可選的,根據(jù)需要可以省略。
if多分支的語法結(jié)構(gòu)如下:
if(邏輯條件1){ //滿足邏輯條件1執(zhí)行的代碼 }else if(邏輯條件2){ //隱藏條件(不滿足條件1) 滿足邏輯條件2執(zhí)行的代碼 }else if(邏輯條件3){ //隱藏條件(不滿足條件1、2) 滿足邏輯條件3執(zhí)行的代碼 }else{ //不滿足以上所有邏輯條件執(zhí)行的代碼 }
需求案例:請你根據(jù)手上的資金選擇購買的手機品牌。如果你手里的錢大于10000,就買個蘋果;如果大于7000, 就買個華為;如果大于5000,就買個小米;如果大于3000,就買個諾基亞;否則,乖乖地去打公共電話。
publicclassDemo01 { publicstaticvoidmain(String[] args) { // if多分支語句 Scanner sc=new Scanner(System.in); //請你根據(jù)手上的資金選擇購買的手機品牌。如果你手里的錢大于10000,就買個蘋果; //如果大于7000, 就買個華為;如果大于5000,就買個小米;如果大于3000,就買個諾基亞; //否則,乖乖地去打公共電話。 System.out.println("請輸入余額"); int money = sc.nextInt(); if(money > 10000){ System.out.println("蘋果手機"); }elseif(money > 7000){ //money <= 10000 System.out.println("華為手機"); }elseif(money > 5000){ System.out.println("小米手機"); }elseif(money > 3000){ System.out.println("諾基亞手機"); }else{ System.out.println("打公共電話"); } } }
大家要注意,我們在串聯(lián)使用多個if時,要特別注意判斷順序和邊界條件的判斷。
4. if嵌套
if嵌套的語法結(jié)構(gòu)如下:
if(邏輯條件1){ if(邏輯條件2){ //滿足邏輯條件1且滿足條件2執(zhí)行的代碼 }else{ //滿足邏輯條件1但不滿足條件2執(zhí)行的代碼 } }else{ //不滿足邏輯條件1執(zhí)行的代碼 }
需求案例:學(xué)校舉行跑步比賽,如果成績在15秒以內(nèi),可以進(jìn)入決賽,男的進(jìn)入男子組決賽,女的進(jìn)入女子組決賽。
publicclassDemo01 { publicstaticvoidmain(String[] args) { // if多條件嵌套 Scanner sc=new Scanner(System.in); //學(xué)校舉行跑步比賽,如果成績在15秒以內(nèi),可以進(jìn)入決賽,男的進(jìn)入男子組決賽,女的進(jìn)入女子組決賽 System.out.println("請輸入你的比賽成績"); double score = sc.nextDouble(); if(score < 15){ System.out.println("請輸入你的性別"); String sex = sc.next(); if("男".equals(sex)){ System.out.println("恭喜進(jìn)入男子組"); }else{ System.out.println("恭喜進(jìn)入女子組"); } }else{ System.out.println("很遺憾你被淘汰了!!!"); } } }