選擇語句又稱為分支語句,它通過對給定的條件進行判斷,從而決定執行兩個或多個分支中的哪一支。因此,在編寫選擇語句之前,應該首先明確判斷條件是什么,并確定當判斷結果為“真”或“假”時應分別執行什么樣的操作/算法。在Java語言中選擇語句主要提供了兩個,一個是if語句,另一個則是switch語句,我們先來看if語句。
if語句的編寫方式我歸納為以下四種,請看下圖:
圖6-1:if語句語法格式
if語句是非常簡單容易理解的,if被翻譯為如果,else被翻譯為其它,我們針對以上第二種寫法進行說明:如果布爾表達式的結果是“真”,則執行它后面的分支,反之則執行else對應的分支。好比說“如果外面下雨了(真),出門則拿一把雨傘,反之則不帶雨傘”。再比如“如果你吃飽了(真)就不需要再吃了,反之則需要繼續吃東西”。那么以上兩個業務用代碼應該如何實現呢?請看下面程序:
boolean raining = false;
if(raining){
System.out.println("外面下雨了,出門記得帶一把傘哦!");
}else{
System.out.println("天氣不錯哦!");
}
boolean eatFull = true;
if(eatFull){
System.out.println("吃的好飽啊!");
}else{
System.out.println("還沒有吃飽,再來份米飯!");
}
上圖中第一種寫法對應的原理圖:
圖6-2:6-1圖中第一種寫法對應的原理圖
上圖中第二種寫法對應的原理圖:
圖6-3:6-1圖中第二種寫法對應的原理圖
上圖中第三種寫法對應的原理圖:
圖6-4:6-1圖中第三種寫法對應的原理圖
上圖中第四種寫法對應的原理圖:
圖6-5:6-1圖中第四種寫法對應的原理圖
通過以上原理的分析,我們可以得出if語句的任何一種形式在執行的時候只要有一個分支執行,則所對應的整個if語句就全部結束了,換句話說,對于一個獨立的完整的if語句來說,最多只能有一個分支執行。
另外,我們可以得出“圖6-1”中的四種寫法,其中第二種和第四種都帶有else分支,所以這兩種寫法我們可以確保肯定會有一個分支執行,另外兩種寫法則無法保證,也就是說第一種和第三種這兩種寫法可能一個分支都不會執行,這兩種寫法的分支是否執行取決于條件是否為true。
還有,Java語言中有這樣一條規定:當分支中只有一條java語句話,大括號可以省略不寫,如以下程序:
boolean sex = true;
if(sex){
System.out.println("男");
}else{
System.out.println("女");
}
//也可以這樣寫
if(sex)
System.out.println("男");
else
System.out.println("女");
雖然大括號可以省略,但是大家編寫程序的時候一定要小心,分析以下程序錯在哪里?
if(sex)
System.out.println("男");
System.out.println("hello world!");
else
System.out.println("女");
顯然if是沒有任何問題的,輸出“男”也是沒問題的,輸出“hello world!”也是正常的,只不過負責輸出“hello world!”的那一行代碼不在if語句的分支當中,那么下面的else則缺少了if語句而編譯報錯。換句話說,else以上的代碼都沒有問題,錯誤出現在else缺少了if。
雖然java規定當分支中只有一條java語句的話大括號可以省略,但是為了程序具有很強的可讀性,所以建議在實際開發中還是不要省略大括號會比較好。
那么,接下來我們給大家列舉幾個if語句的案例,幫助大家更好的理解和運用if語句。
示例代碼1:業務背景:根據用戶輸入不同的數字來判斷用戶不同性別,當輸入1時性別為男,當輸入0時性別為女,輸入其它則不合法。
java.util.Scanner scan = new java.util.Scanner(System.in);
System.out.print("請輸入數字:");
int i = scan.nextInt();
if(i == 1){
System.out.println("性別:男");
}else if(i == 0){
System.out.println("性別:女");
}else{
System.out.println("對不起,您輸入不合法!");
}
示例代碼2:業務背景:鍵盤接收一個學生的成績,范圍在[0-100],根據成績判斷等級,[90-100]等級為“優秀”,[80-90)等級為“良好”,[70-80)等級為“中等”,[60-70)等級為“及格”,[0-60)等級為“大笨蛋”,輸入其它數字表示成績不合法。
java.util.Scanner scan = new java.util.Scanner(System.in);
System.out.print("輸入考試成績:");
int score = scan.nextInt();
if(score < 0 || score > 100){
System.out.println("對不起,您輸入的成績不合法!");
}else if(score >= 90 && score <= 100){
System.out.println("成績等級:優秀");
}else if(score < 90 && score >= 80){
System.out.println("成績等級:良好");
}else if(score < 80 && score >= 70){
System.out.println("成績等級:中等");
}else if(score < 70 && score >= 60){
System.out.println("成績等級:及格");
}else if(score < 60 && score >= 0){
System.out.println("成績等級:大笨蛋");
}
對于初學者來說以上程序是可以的,但是對于老程序員來說,以上的代碼就太冗余了,我們將其進行優化,看以下代碼:
java.util.Scanner scan = new java.util.Scanner(System.in);
System.out.print("輸入考試成績:");
int score = scan.nextInt();
String grade = "大笨蛋";
if(score < 0 || score > 100){
grade = "對不起,您輸入的成績不合法!";
}else if(score >= 90){
grade = "優秀";
}else if(score >= 80){
grade = "良好";
}else if(score >= 70){
grade = "中等";
}else if(score >= 60){
grade = "及格";
}
System.out.println("成績等級:" + grade);
通過以上程序我們可以了解到一個功能的實現代碼有多種編寫形式,大家在學習的時候千萬別機械性的一行一行對抄代碼,實際上這種學習方法是非常痛苦,并且低效的,軟件開發主要培養的是編程思想/編程思路,使用編程的思路解決現實生活中的問題。當然,對于初學者來說我們不可能剛開始就寫出簡單而高效的程序,這需要不斷的模仿,不斷的積累,尤其我們可以多參考高手寫的程序(例如:JDK源代碼),當你的代碼達到一定量的時候,你就可以出山了。
示例代碼3:業務背景:系統首先接收天氣參數,1表示下雨天,0表示晴天,如果天氣是晴天,輸出“走起,一起出去玩耍嘍!”,當天氣是下雨天,則繼續接收性別參數,1表示男,0表示女,當性別為女,則拿一把小花傘出去玩,當性別為男,則拿一把大黑傘出去玩。
java.util.Scanner scann = new java.util.Scanner(System.in);
System.out.print("請輸入天氣指數,1表示下雨天,0表示晴天:");
int weather = scann.nextInt();
if(weather == 1){
System.out.print("請再輸入您的性別,1表示男,0表示女:");
int sex = scann.nextInt();
if(sex == 0){
System.out.println("女士,外面下雨了,您需要帶一把小花傘");
}else if(sex == 1){
System.out.println("哥們,外面下雨了,您需要帶一把大黑傘");
}else{
System.out.println("對不起,您輸入性別參數出錯了!");
}
}else if(weather == 0){
System.out.println("走起,一起出去玩耍嘍!");
}else{
System.out.println("對不起,您輸入天氣參數出錯了!");
}
運行結果如下圖所示:
圖6-6:if語句嵌套演示
通過以上的程序我們得知,if語句是可以進行嵌套使用的,也就是說if語句的某個分支當中還可以繼續編寫其它if語句。實際上所有的控制語句都是可以進行嵌套使用的。語句嵌套這個知識點本來是不需要拿來進行特殊強調的,專門強調之后反而會讓初學者特殊對待,我希望大家不要特殊對待嵌套。雖然被嵌套的是一個控制語句,但這個控制語句也是一段普通的java程序,你說呢!如下圖:
圖6-7:控制語句嵌套
總之,選擇語句之if語句,在實際開發中使用頻率非常高,大家一定要掌握if語句的編寫方式以及運行原理,也可以自己想一些現實生活中的小例子加以練習。