官术网_书友最值得收藏!

3.2 分支語句

分支語句在程序中的作用是使程序更靈活,它允許程序根據(jù)不同的情況、不同的條件等采取不同的動(dòng)作、進(jìn)行不同的操作,實(shí)現(xiàn)選擇結(jié)構(gòu)。在Java語言中使用的分支語句有if -else語句和switch語句。

3.2.1 if - else語句

1.用單個(gè)if語句實(shí)現(xiàn)單選、雙選結(jié)構(gòu)

用一個(gè)if - else語句可實(shí)現(xiàn)根據(jù)一個(gè)關(guān)系或邏輯表達(dá)式的值是true還是false兩種情況下

進(jìn)行不同操作的程序結(jié)構(gòu),它的語法結(jié)構(gòu)如下:

              if(布爾表達(dá)式)
                語句1
              [else
                語句2]

執(zhí)行到本語句,首先要計(jì)算布爾表達(dá)式,若值為真,則執(zhí)行語句1,否則(值為假時(shí))執(zhí)行語句2(實(shí)現(xiàn)雙選結(jié)構(gòu))。語句1和語句2都可以是復(fù)合語句。

if - else語句的else語句2部分可省略,省略時(shí),若布爾表達(dá)式的值為假,則不執(zhí)行任何語句(實(shí)現(xiàn)單選結(jié)構(gòu))。

【例3.2】用Math類的random()方法產(chǎn)生一個(gè)字符,若該字符是一個(gè)大寫英文字母,則輸出“Yes!”,否則輸出“No!”。

random()方法產(chǎn)生的隨機(jī)數(shù)在0.0和1.0之間,乘以128后,其值在0.0和128.0之間,將它轉(zhuǎn)換為char類型后,用if來判斷是否在'A'和'Z'之間。程序如下:

              class IsUpper{
                public static void main(String args[]){
                  char ch;
                  ch=(char)(Math.random()*128);
                  if(ch >= 'A' && ch <= 'Z')
                    System.out.println(ch + "是大寫字母。");
                  else
                    System.out.println(ch + "不是大寫字母。");
                }
              }

程序的一次運(yùn)行結(jié)果如下:

              e不是大寫字母。

2.用多個(gè)if語句實(shí)現(xiàn)多選結(jié)構(gòu)

(1)if語句并列

在多個(gè)if語句中可書寫多個(gè)條件,若這些if并列,且這些條件包含了所有的情況無一遺漏也不重復(fù),就可以實(shí)現(xiàn)多選結(jié)構(gòu)。

【例3.3】對任意三個(gè)存放在變量a,b,c中的int類型數(shù)據(jù),按從小到大的順序輸出它們。

下面程序的設(shè)計(jì)思想是:將最小數(shù)據(jù)存入變量a中,這需要將a與b、c比較兩次;然后,將b,c中的小者存入變量b中,這需要b與c比較1次,共需比較3次。用3個(gè)并列if實(shí)現(xiàn)。

              class Sort3{
                public static void main(String args[]){
                  int a = 10,b = 8,c = 12,t;
                  if(a > b){t = a;a = b;b = t;}
                  if(a > c){t = a;a = c;c = t;}
                  if(b > c){t = b;b = c;c = t;}
                  System.out.println(a + " " + b + " " + c);
                }
              }

程序運(yùn)行結(jié)果如下:

              8 10 12

在本例中,程序運(yùn)行前,數(shù)據(jù)a,b,c中的值是無序的,程序運(yùn)行后,a,b,c已經(jīng)按從小到大的順序排序。

(2)if語句嵌套

在if - else語句中,若語句1或語句2又是if - else語句時(shí),就構(gòu)成了if語句的嵌套。采用if嵌套的程序設(shè)計(jì)方法也可實(shí)現(xiàn)多選操作。

【例3.4】檢查用random()方法產(chǎn)生的一個(gè)字符,判斷是否為英文大寫字母、小寫字母、數(shù)字、空格或是其他符號,并輸出相應(yīng)信息。

程序要根據(jù)5 種不同的字符情況輸出不同的信息。這屬于多分支的程序設(shè)計(jì),采用if嵌套的方法。程序如下:

              class Letter{
                public static void main(String args[]){
                  char ch;
                  ch=(char)(Math.random()*128);
                  if(ch < ' ')
                    System.out.println("是不可顯示字符!");
                  else if(ch >= 'a' && ch <= 'z')
                    System.out.println(ch + " 是小寫字母!");
                  else if(ch >= 'A' && ch <= 'Z')
                    System.out.println(ch + " 是大寫字母!");
                  else if(ch >= '0' && ch <= '9')
                    System.out.println(ch + " 是數(shù)字!");
                  else
                    System.out.println(ch + " 是其他符號!");
                }
              }

需要注意的是,Java編譯器總是將else與其最近未配對的if配對。因?yàn)閕f - else語句允許else部分省略,會(huì)出現(xiàn)if的個(gè)數(shù)多于else個(gè)數(shù)的情況,此時(shí)要注意if和else的配對,否則可能發(fā)生邏輯錯(cuò)誤。例如:

              if(x > 5)
                if(y > 10)
                  System.out.println("x大于5并且y大于10。");
                else
                  System.out.println("x不大于5。");

程序員想實(shí)現(xiàn)x是否大于5輸出不同字符串的本意,但Java編譯器卻理解為:當(dāng)x大于5且y大于10時(shí)輸出第一個(gè)字符串,當(dāng)x大于5且y不大于10時(shí)輸出第二個(gè)字符串。兩個(gè)字符串均在x大于5時(shí)輸出,當(dāng)x不大于5時(shí),什么也不輸出,此時(shí)出現(xiàn)了邏輯錯(cuò)誤。

為避免嵌套時(shí)if和else配對時(shí)邏輯出錯(cuò),可用下面的方法之一來解決。

(1)在用if嵌套方法進(jìn)行多分支程序設(shè)計(jì)時(shí),將if語句嵌套在else部分。例如,上述例子中的邏輯關(guān)系可改寫為:

              if(x <= 5)
                System.out.println("x不大于5。");
              else
                if(y > 10)
                  System.out.println("x大于5并且y大于10。");

(2)若需要在if - else語句的語句1部分嵌套if語句,則將內(nèi)層的if語句用括號括起來,指明正確的if與else的配對組合。例如,上述例子中的邏輯關(guān)系可改寫為:

              if(x > 5){
                if(y > 10)
                  System.out.println("x大于5并且y大于10。");
                }
              else
                System.out.println("x不大于5。");

3.2.2 switch語句

switch多分支語句結(jié)構(gòu)實(shí)際上也是一種if - else結(jié)構(gòu),不過它使得在編碼時(shí)很容易寫出判斷條件,特別是條件有很多選項(xiàng)而且比較簡單的時(shí)候。switch的語法結(jié)構(gòu)如下:

              switch(表達(dá)式){
                case值1: 語句1;break;
                case值2: 語句2;break;
                ...
                case值N: 語句N;break;
                default: 語句N+1;break;
              }

執(zhí)行switch語句時(shí),首先計(jì)算表達(dá)式的值(其類型是整型或字符型,并與各個(gè)case之后的常量值類型相同),然后將該值同每個(gè)case后的值做恒等比較:若相等,則程序流程轉(zhuǎn)入該值后的語句;若表達(dá)式的值與任何一個(gè)case后的值都不相同,則執(zhí)行default后的語句(若沒有default子句,則什么都不執(zhí)行)。

使用switch語句時(shí),需要注意的是:

(1)各個(gè)case后的常量值應(yīng)各不相同。

(2)通常在每一種case情況后都應(yīng)使用break語句,否則,遇到第一個(gè)相等情況后,下面break前的所有語句都會(huì)被執(zhí)行(包括default后面的語句,若有的話)。可以試著分別加上或去掉break語句來執(zhí)行例3.4。

(3)語句1至語句N+1可以是一條或多條語句,不必使用復(fù)合語句。

(4)不同case后的語句相同時(shí),可以合并多個(gè)case子句。

(5)switch語句在用表達(dá)式的值比較每一個(gè)case后的值時(shí),是從前往后順序進(jìn)行的。

若各個(gè)值互不相同,則case子句的順序可任意。通常default子句放在switch結(jié)構(gòu)的最后,使得switch語句最后執(zhí)行default子句。

【例3.5】查看五級分制的成績對應(yīng)的百分制成績的范圍。設(shè)百分制與五級分制成績的對應(yīng)關(guān)系為:

                    A:90~100
                    B:80~89
                    C:70~79
                    D:60~69
                    E: 60以下
              class SwitchTest{
                public static void main(String args[])throws java.io.IOException{
                  char a;
                  System.out.println("請輸入大寫字母A ~ E:");
                  a=(char)System.in.read();
                  switch(a){
                    case 'A':System.out.println("范圍90~100!");break;
                    case 'B':System.out.println("范圍80~89!");break;
                    case 'C':System.out.println("范圍70~79!");break;
                    case 'D':System.out.println("范圍60~69!");break;
                    case 'E':System.out.println("60分以下!");break;
                    default: System.out.println("重新輸入!");
                  }
                }
              }

在代碼中加break語句后,應(yīng)明確知道程序?qū)?huì)發(fā)生的變化,并要確認(rèn)程序沒有轉(zhuǎn)移到不想執(zhí)行的代碼上。

【例3.6】輸入一個(gè)小寫字母,判斷是元音還是輔音。

因?yàn)樵粲? 個(gè),都需要執(zhí)行相同的語句,為避免重復(fù),只需寫出最后一個(gè)值后的語句和break語句即可。

              class EmptyCase {
                public static void main(String args[])throws java.io.IOException{
                  // 從鍵盤輸入一個(gè)小寫字母
                  char ch =(char)System.in.read();
                  // 確定是元音還是輔音
                  switch(ch) {
                    case 'a':
                    case 'e':
                    case 'i':
                    case 'o':
                    case 'u':System.out.println(ch + " 是元音");break;
                    default:System.out.println(ch + " 是輔音");
                  }
                }
              }
主站蜘蛛池模板: 祥云县| 古蔺县| 大田县| 上虞市| 丹江口市| 特克斯县| 崇文区| 罗平县| 荃湾区| 依兰县| 多伦县| 堆龙德庆县| 同江市| 堆龙德庆县| 柏乡县| 阿坝县| 浮梁县| 富锦市| 扎鲁特旗| 新建县| 托克逊县| 玉门市| 永春县| 犍为县| 遵义市| 河津市| 阳泉市| 扬中市| 兰考县| 白朗县| 疏勒县| 怀来县| 潞城市| 定州市| 洞头县| 建瓯市| 青州市| 青冈县| 新竹县| 大荔县| 光泽县|