国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Day 3 : 運(yùn)算符和表達(dá)式-2、分支結(jié)構(gòu)

2019-11-14 21:09:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
Day 3 : 運(yùn)算符和表達(dá)式-2、分支結(jié)構(gòu)
  1. 運(yùn)算符和表達(dá)式-2
  2. 分支結(jié)構(gòu)
1. 運(yùn)算符和表達(dá)式-2

1.1. 賦值運(yùn)算

1.1.1. 使用“=”進(jìn)行賦值運(yùn)算

“=”稱為賦值運(yùn)算符,用于對(duì)變量賦值。關(guān)于賦值運(yùn)算符,除了將右邊的表達(dá)式計(jì)算出來(lái)賦給左邊以外還具備如下特點(diǎn):賦值表達(dá)式本身也有值,其本身之值即為所賦之值。示例代碼如下所示:

int num = 18, index;System.out.PRintln(index = num % 5);  // 結(jié)果為:3,賦值表達(dá)式本身也有值System.out.println(index);  // 結(jié)果為:3int a, b, c;a = b = c = 100;  // c=100 整個(gè)表達(dá)式的值為100, 將其賦值給b,同樣b=(c=100)整個(gè)表達(dá)式的值也為100,然后有將這個(gè)值賦給了a,所以a 的值也是100。

1.1.2. 使用擴(kuò)展賦值表達(dá)式

在賦值運(yùn)算符”= ”前加上其它運(yùn)算符,即為擴(kuò)展賦值運(yùn)算符,其效率高于賦值運(yùn)算符,推薦使用,擴(kuò)展賦值運(yùn)算符如下圖 - 5所示:

圖- 5

1.2. 字符連接運(yùn)算

1.2.1. 使用“+”進(jìn)行字符串連接

“+”除了可以進(jìn)行算術(shù)運(yùn)算以外,還可以實(shí)現(xiàn)字符串的連接,同時(shí)可以實(shí)現(xiàn)字符串與其他數(shù)據(jù)類型的“相連”。

當(dāng) + 號(hào)作用于兩個(gè)數(shù)字類型變量時(shí),是在進(jìn)行算術(shù)運(yùn)算。

當(dāng) + 號(hào)兩邊的變量有一個(gè)是字符串類型,即””括起來(lái)的時(shí)候,則其進(jìn)行的是字符串的連接,連接后的結(jié)果為字符串類型。示例代碼如下所示:

int a = 100;String msg = "a=" + a;System.out.println(msg);    //a=100,字符串拼接msg = "" + 100 + 200;System.out.println(msg);   //結(jié)果為: 100200,””+100,為字符串100再拼上200為100200msg = 100 + 200 + "";System.out.println(msg);   //結(jié)果為:300,100+200為算術(shù)運(yùn)算結(jié)果為300,再加上””為300

1.3. 條件(三目)運(yùn)算

1.3.1. 使用條件(三目)運(yùn)算符

條件運(yùn)算符又稱“三目”運(yùn)算符,其結(jié)構(gòu)為:boolean表達(dá)式 ? 表達(dá)式1:表達(dá)式2。

條件運(yùn)算符的規(guī)則如下:

  1. 先計(jì)算boolean表達(dá)式;
  2. 如果boolean表達(dá)式的值為true,整個(gè)表達(dá)式的值為表達(dá)式1的值;
  3. 如果boolean表達(dá)式的值為false,整個(gè)表達(dá)式的值為表達(dá)式2的值。

示例代碼如下:

int a = 100, b = 200;int flag = a > b ? 1 : -1;   //因?yàn)閍>b為false,所以整個(gè)表達(dá)式的值為-1,將其賦給flag,即:flag的值為-1。

1.3.2. 條件(三目)運(yùn)算符的嵌套

條件運(yùn)算符可以嵌套使用,所謂嵌套是指在條件(三目)表達(dá)式:“boolean表達(dá)式 ? 表達(dá)式1:表達(dá)式2”中的表達(dá)式1或表達(dá)式2也是條件(三目)表達(dá)式,相當(dāng)于多重判斷,示例代碼如下所示:

int a = -3;String r = a > 0 ? "正數(shù)" : (a == 0 ? "0":"負(fù)數(shù)");System.out.println(r); //結(jié)果為負(fù)數(shù),因?yàn)?a 的值小于 0,即boolean 表達(dá)式的值為 false ,則取問(wèn)號(hào)后第二個(gè)表達(dá)式的值作為表達(dá)式的結(jié)果。而問(wèn)號(hào)后的第二個(gè)表達(dá)式也是一個(gè)三目運(yùn)算符所構(gòu)成的表達(dá)式。因?yàn)?a==0 表達(dá)式的值為 false,則取“負(fù)數(shù)”為表達(dá)式的結(jié)果。

2. 分支結(jié)構(gòu)

2.1. 什么是分支結(jié)構(gòu)

首先,看一個(gè)需求,假設(shè)需要編寫一個(gè)收銀柜臺(tái)收款程序,要求根據(jù)商品單價(jià)、購(gòu)買數(shù)量以及收款金額,計(jì)算并輸出應(yīng)收金額和找零。

通過(guò)分析可以想到,這個(gè)程序,需要定義三個(gè)輸入,即:?jiǎn)蝺r(jià)、數(shù)量、金額。定義兩個(gè)輸出,即:應(yīng)收金額、找零。因?yàn)榻痤~有可能為小數(shù)類型,所以變量的數(shù)據(jù)結(jié)構(gòu)定義為double類型。

此程序可以以如下方式解決,用戶由控制臺(tái)輸入:商品單價(jià)、購(gòu)買數(shù)量、收款金額;而后計(jì)算商品的總價(jià)及找零,并輸出。示例代碼如下所示:

public static void main(String[] args) {        //定義輸入        Scanner console = new Scanner(System.in);        System.out.println("請(qǐng)輸入單價(jià)(¥):");        double unitPrice = console.nextDouble();        System.out.println("請(qǐng)輸入數(shù)量:");        double amount = console.nextDouble();        System.out.println("請(qǐng)輸入金額(¥):");        double money = console.nextDouble();        console.close();                //計(jì)算商品總價(jià)        double totalPrice = unitPrice * amount;        //計(jì)算找零        double change = money - totalPrice;                //輸出        System.out.println("應(yīng)收金額為:" + totalPrice +",找零為:" + change);    }

如上代碼,輸入數(shù)據(jù)后,可以正確輸出應(yīng)收金額及找零,假設(shè)現(xiàn)在需求增加,當(dāng)商品總價(jià)滿500時(shí)享受8折優(yōu)惠, 如何解決?這種情況,在軟件應(yīng)用中,需要使用分支結(jié)構(gòu)來(lái)實(shí)現(xiàn)。

任何復(fù)雜的程序邏輯結(jié)構(gòu)都可以通過(guò)“順序”,“分支”,“循環(huán)”這三種基本的程序結(jié)構(gòu)實(shí)現(xiàn)。如圖 – 1所示:

圖- 1

剛剛的案例即為順序結(jié)構(gòu),第一步A執(zhí)行完執(zhí)行第二步B,第二步執(zhí)行完執(zhí)行第三步,一步一步順序執(zhí)行。分支結(jié)構(gòu)即為根據(jù)一個(gè)條件做判斷,如果條件滿足則執(zhí)行A,否則執(zhí)行B。還有一種即為后面要介紹的循環(huán)結(jié)構(gòu)。原則上,任何復(fù)雜的程序, 都可以通過(guò)這三種結(jié)構(gòu)來(lái)解決。

當(dāng)程序在運(yùn)行過(guò)程中, 需要根據(jù)不同的條件而運(yùn)行不同的語(yǔ)句時(shí),即可以使用分支結(jié)構(gòu),java中有專門的語(yǔ)法結(jié)構(gòu)來(lái)實(shí)現(xiàn)分支:

  1. 當(dāng)條件滿足時(shí)運(yùn)行某些語(yǔ)句;當(dāng)條件不滿足時(shí)則不運(yùn)行這些語(yǔ)句——if結(jié)構(gòu)。
  2. 當(dāng)條件滿足時(shí)運(yùn)行某些語(yǔ)句; 當(dāng)條件不滿足時(shí)運(yùn)行另外一些語(yǔ)句——if-else結(jié)構(gòu)

2.2. if語(yǔ)句

2.2.1. if語(yǔ)句的執(zhí)行邏輯

首先看下面if語(yǔ)句的語(yǔ)法:

語(yǔ)句0;if(邏輯表達(dá)式){        語(yǔ)句1;        語(yǔ)句2;}語(yǔ)句3;

如上語(yǔ)句的執(zhí)行步驟如下所示:

步驟一:執(zhí)行語(yǔ)句0;

步驟二: 判斷邏輯表達(dá)式的值,此表達(dá)式的值結(jié)果為boolean類型,即true或者false。此處可以是關(guān)系表達(dá)式也可以是邏輯表達(dá)式。

  1. 若值為true,則執(zhí)行if語(yǔ)句塊中的語(yǔ)句;
  2. 若值為false,則跳過(guò)if語(yǔ)句塊;

步驟三:執(zhí)行語(yǔ)句3語(yǔ)句。

2.2.2. if語(yǔ)句流程圖

if語(yǔ)句的執(zhí)行邏輯如下圖 - 2所示:

圖- 2

通過(guò)圖示得出結(jié)論:當(dāng)條件滿足時(shí),執(zhí)行語(yǔ)句塊,然后執(zhí)行if語(yǔ)句下面的語(yǔ)句;否則跳過(guò)語(yǔ)句塊,直接執(zhí)行if語(yǔ)句下面的語(yǔ)句。

2.2.3. if語(yǔ)句用于處理分支邏輯

if語(yǔ)句是java中用于處理分支結(jié)構(gòu)的語(yǔ)句,下面,通過(guò)if語(yǔ)句來(lái)實(shí)現(xiàn)剛剛的打折功能邏輯,再回顧一下新添的需求:如果商品總價(jià)大于等于500,則打8折。如下圖– 3 紅色部分即為if的判斷邏輯:

圖- 3

可以看到,計(jì)算商品總價(jià)之后,進(jìn)行了總價(jià)大于等于500的業(yè)務(wù)判斷,若判斷結(jié)果為true,則計(jì)算折扣后的應(yīng)收金額,再計(jì)算找零后輸出。若判斷結(jié)果為false,則直接計(jì)算找零后輸出。如下即為實(shí)現(xiàn)代碼:

……    double totalPrice = ……;    if (totalPrice >= 500) {         totalPrice = totalPrice * 0.8;    }    ……

通過(guò)如上代碼可以看出: 當(dāng)total>=500為true時(shí), 總額乘以0.8, 即打8折。當(dāng)total>=500為false時(shí),不執(zhí)行if語(yǔ)句塊的內(nèi)容。

2.2.4. if語(yǔ)句塊不要省略“{}”

if語(yǔ)句塊在執(zhí)行過(guò)程中,有一個(gè)問(wèn)題是需要注意的,先看下面的兩段代碼:

代碼一:
int num = 5;if(num>2)           System.out.print(num);           System.out.println(“ 大于2 ”);

代碼二:
int num = 5;if(num>2){        System.out.print(num);        System.out.println(“ 大于2 ”);}

分析如上兩個(gè)代碼段,得出的結(jié)論是:兩段代碼輸出結(jié)果一樣,即 “5 大于 2”。再看如下兩段代碼,輸出結(jié)果還一樣嗎?

代碼一:
int num = 5;if(num<2)           System.out.println(num);           System.out.println(“小于2”);

代碼二:
int num = 5;if(num<2){        System.out.print(num);        System.out.println(“小于2”);}

分析如上兩個(gè)代碼段,可以得出,代碼段一的輸出結(jié)果是“大于2”,代碼段二沒有任何輸出。分析輸出結(jié)果可以看出,代碼段二的結(jié)果為正確結(jié)果,而代碼段一輸出的“小于2”是不應(yīng)該存在的,出現(xiàn)這個(gè)問(wèn)題的原因在于,在if語(yǔ)句之后沒有添加“{}”,而java語(yǔ)法規(guī)定,當(dāng)if語(yǔ)句塊中只包含一條語(yǔ)句時(shí),可以省略“{}”,但是if語(yǔ)句塊也只能作用于它下面的一條語(yǔ)句。

看如上代碼段一的if判斷,只作用于第一個(gè)輸出語(yǔ)句,因?yàn)閚um<2結(jié)果為false,所以第一個(gè)輸出語(yǔ)句并未執(zhí)行,而第二個(gè)輸出語(yǔ)句“小于2”不屬于if作用范圍,所以無(wú)論條件滿足與否,都會(huì)執(zhí)行。故而,輸出了“小于2”的結(jié)果。

所以,考慮到代碼的可讀性、擴(kuò)展性,建議即便if語(yǔ)句塊中只有一條語(yǔ)句,也不要省略“{}”。

2.3. if-else語(yǔ)句

2.3.1. if-else語(yǔ)句的執(zhí)行邏輯

分析上面的案例,當(dāng)計(jì)算出最終(打折前、打折后)的應(yīng)收金額后,直接計(jì)算找零,這

個(gè)時(shí)候就出現(xiàn)了一個(gè)問(wèn)題,如果收款的金額小于應(yīng)收的金額,那么輸出的找零就會(huì)為負(fù)數(shù)結(jié)果,這顯然用戶體驗(yàn)不好,下面對(duì)它做一下改進(jìn),要求考慮程序的異常情況,增加需求如下:

  1. 若收款金額大于等于應(yīng)收金額,則計(jì)算找零后輸出;
  2. 若收款金額小于應(yīng)收金額,則輸出錯(cuò)誤提示信息,如何處理?

這種情況,單單使用if語(yǔ)句顯然無(wú)法解決了,因?yàn)閕f語(yǔ)句用于解決的是,當(dāng)某條件滿足時(shí)執(zhí)行某段業(yè)務(wù)處理的邏輯,而現(xiàn)在的邏輯時(shí),當(dāng)條件滿足時(shí)執(zhí)行某段業(yè)務(wù)邏輯,當(dāng)條件不滿足時(shí)需要執(zhí)行另一段業(yè)務(wù)邏輯。看如下圖 – 4所示的紅色部分:

圖- 4

若想實(shí)現(xiàn)這樣的判斷邏輯,可以考慮if-else語(yǔ)句。看一下下面的語(yǔ)法:

語(yǔ)句0;if(邏輯表達(dá)式){        語(yǔ)句塊1;} else {        語(yǔ)句塊2;}語(yǔ)句3;

如上語(yǔ)句的執(zhí)行步驟如下所示:

步驟一:執(zhí)行語(yǔ)句0;

步驟二:判斷if邏輯表達(dá)式的值:

  1. 若值為true,則執(zhí)行語(yǔ)句塊1;
  2. 若值為false,則執(zhí)行語(yǔ)句塊2;

步驟三:執(zhí)行語(yǔ)句3語(yǔ)句。

2.3.2. if-else語(yǔ)句流程圖

if-else語(yǔ)句的執(zhí)行邏輯如下圖 - 5所示:

圖- 5

通過(guò)圖-5可以看到:當(dāng)條件滿足時(shí),執(zhí)行語(yǔ)句塊1,然后執(zhí)行if-else語(yǔ)句下面的語(yǔ)句;否則執(zhí)行語(yǔ)句塊2,再執(zhí)行if-else語(yǔ)句下面的語(yǔ)句。

2.3.3. if-else語(yǔ)句用于處理分支邏輯

通過(guò)下面的代碼,可以解決新增加的異常情況處理問(wèn)題:

……if( money >= totalPrice ) {        double change = money – totalPrice;         System.out.println("應(yīng)收金額為:" + totalPrice +",找零為:" + change);} else {        System.out.println(“Error! 收款金額小于應(yīng)收金額”);}

說(shuō)明:money為收款金額,totalPrice為應(yīng)收金額;當(dāng)收款金額大于等于應(yīng)收金額時(shí),則計(jì)算找零并輸出,否則,提示錯(cuò)誤信息。

2.4. else if語(yǔ)句

2.4.1. if-else語(yǔ)句的嵌套

在日常生活中,很多情況并非進(jìn)行一次邏輯判斷就可以獲取最終的結(jié)果, 如圖– 6所示:

圖 - 6

可以看出,實(shí)現(xiàn)制作沙拉的過(guò)程進(jìn)行了兩次判斷,首先判斷是否有黃瓜,若有則直接制作黃瓜沙拉后結(jié)束,若沒有黃瓜則判斷是否有胡蘿卜,若有則制作胡蘿卜沙拉結(jié)束,沒有則不能上菜結(jié)束。這種情況,單單使用if-else還無(wú)法實(shí)現(xiàn),因?yàn)閕f-else只是判斷了一次就結(jié)束了,而當(dāng)前的情況需要判斷兩次。

在java程序中,當(dāng)程序的分支數(shù)大于2時(shí),可以用if-else嵌套的方式解決,即:else語(yǔ)句塊中又包含if語(yǔ)句(或if-else語(yǔ)句),下面看一個(gè)實(shí)際的需求:

根據(jù)學(xué)員的成績(jī)來(lái)輸出等級(jí):

  1. A(成績(jī)大于等于90分);
  2. B(成績(jī)小于90分且大于等于80分);
  3. C(成績(jī)小于80分且大于等于60分);
  4. D(成績(jī)小于60)。

此程序即為多路判斷,如圖– 7所示流程圖:

圖- 7

首先判斷分?jǐn)?shù)是否大于等于90,若為真則輸出A終止,為假則再判斷分?jǐn)?shù)是否大于等于80,若為真輸出B終止,為假則再判斷分?jǐn)?shù)是否大于等于60,若為真輸出C終止,為假則輸出D。分析可以看出,該程序經(jīng)過(guò)了3次判斷。需要在else中嵌套判斷。代碼如下所示:

2.4.2. else if語(yǔ)句執(zhí)行邏輯

如下圖 – 8所示,在else中再次進(jìn)行if-else的判斷:

圖- 8

從上圖中看出,當(dāng)判斷層數(shù)比較多時(shí),代碼清晰度不夠好,在實(shí)際開發(fā)中常常使用如下圖- 9的方式來(lái)實(shí)現(xiàn),事實(shí)上,else if結(jié)束就是if-else嵌套的簡(jiǎn)便寫法:

圖 – 9

實(shí)現(xiàn)該程序代碼如下所示:

… … ...if(score>=90) {        System.out.println("A");} else if (score>=80) {        System.out.println("B");} else if(score>=60) {        System.out.println("C");} else {        System.out.println("D");}

通過(guò)上面的代碼可以看出,使用else if方式,程序邏輯更清晰,可讀性更好。

2.5. switch-case語(yǔ)句

2.5.1. switch-case語(yǔ)句執(zhí)行邏輯

switch-case是一種特殊的分支結(jié)構(gòu),與else if類似,但其應(yīng)用面不如else if,只能用于特殊的情況之下, switch-case可以根據(jù)一個(gè)整數(shù)值的不同取值,從不同的程序入口開始執(zhí)行。語(yǔ)法如下所示:

     switch(整型表達(dá)式) {         case 整型常量值1:     //入口1             語(yǔ)句1;             語(yǔ)句2;         case 整型常量值2:     //入口2             語(yǔ)句3;             ……         default:               //默認(rèn)入口             語(yǔ)句n;     }

switch-case流程圖見圖 – 10所示:

圖- 10

分析上圖,可以看出其執(zhí)行邏輯如下:

計(jì)算整型表達(dá)式的值:

  1. 若值等于整型常量值1,則從語(yǔ)句1開始執(zhí)行,而后語(yǔ)句2、3,一直執(zhí)行到語(yǔ)句n。
  2. 若值等于整型常量值2,則從語(yǔ)句3開始執(zhí)行,一直執(zhí)行到語(yǔ)句n。
  3. 若沒有找到匹配的值,則只執(zhí)行語(yǔ)句n。

通過(guò)分析可以看出,switch是以case后的整型常量值作為入口的,若值相等,即開始執(zhí)行其后面的語(yǔ)句。

使用switch時(shí)需要注意兩個(gè)問(wèn)題,第一,case后面的常量值必須不同,第二,switch后面的整型表達(dá)式的值必須是整型或字符型。

2.5.2. switch-case和break聯(lián)合使用

前面的代碼中判斷整型表達(dá)式的值,若其值等于某個(gè)整型常量值,則會(huì)以此作為入口,依次執(zhí)行其后面所有的語(yǔ)句。但是在實(shí)際應(yīng)用中,通常case1、case2、…、caseN對(duì)應(yīng)完全不同的操作,即: 若表達(dá)式的值等于case1,則只執(zhí)行case1后的語(yǔ)句,不會(huì)再執(zhí)行case2、caseN等后面的語(yǔ)句。這種情況下可以和break語(yǔ)句配合使用,執(zhí)行完相應(yīng)語(yǔ)句后即退出switch塊,不繼續(xù)執(zhí)行下面的語(yǔ)句。語(yǔ)法如下所示:

switch(整型表達(dá)式) {         case 整型常量值1:     //入口1             語(yǔ)句1;             語(yǔ)句2;             break ;         case 整型常量值2:     //入口2             語(yǔ)句3;             break ;             ……         default:               //默認(rèn)入口             語(yǔ)句n;}

如上程序中的break語(yǔ)句的作用在于跳出switch結(jié)構(gòu),其執(zhí)行邏輯如下:

  1. 計(jì)算整型表達(dá)式的值:
  2. 如果值等于整型常量值1,則執(zhí)行語(yǔ)句1、語(yǔ)句2,跳出switch結(jié)構(gòu)結(jié)束;
  3. 若值等于整型常量值2,則執(zhí)行語(yǔ)句3,跳出switch結(jié)構(gòu)結(jié)束;
  4. 如果沒有找到匹配的值,則執(zhí)行語(yǔ)句n,結(jié)束。default后可以不寫break。

2.5.3. switch-case語(yǔ)句用于分支

在實(shí)際應(yīng)用中,switch-case語(yǔ)句常常與break配合使用,參見下面的代碼:

int num = 2;switch(num) {         case 1:              System.out.println(“呼叫教學(xué)部”);             break;         case 2:             System.out.println(“呼叫人事部”);             break;         default:              System.out.println(“人工服務(wù)”);}

上面代碼的輸出結(jié)果為“呼叫人事部“,因?yàn)槠ヅ鋍ase 2輸出后,即break跳出switch語(yǔ)句了。

2.5.4. switch-case的優(yōu)勢(shì)

switch-case結(jié)構(gòu)在實(shí)際應(yīng)用中較廣泛, 常常和break語(yǔ)句結(jié)合使用實(shí)現(xiàn)分支的功能。

在很多情況下,switch-case可以代替else if結(jié)構(gòu),而switch-case實(shí)現(xiàn)分支功能的效率要高于else if結(jié)構(gòu),并且結(jié)構(gòu)更清晰,所以推薦使用。從JDK 7.0開始,switch-case可以支持字符串表達(dá)式,將更加方便程序的操作。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 藁城市| 华容县| 佛坪县| 峨山| 庄河市| 贺州市| 平湖市| 三都| 贵德县| 平顺县| 泗水县| 颍上县| 东平县| 博客| 马山县| 鄱阳县| 石柱| 抚顺市| 茂名市| 阿拉善左旗| 灵山县| 台中市| 石狮市| 玉溪市| 特克斯县| 龙山县| 夏邑县| 平塘县| 磴口县| 松溪县| 繁昌县| 安新县| 宜兰市| 栾川县| 渝中区| 云阳县| 贡嘎县| 陵川县| 托里县| 太保市| 长寿区|