<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本章是關於Java流程控制語句的最全彙總,本篇為彙總上篇。
流程是人們生活中不可或缺的一部分,它表示人們每天都在按照一定的流程做事。
比如出門搭車、上班、下班、搭車回家。這其中的步驟是有順序的。
程式設計也需要有流程控制語句來完成使用者的要求,根據使用者的輸入決定程式要進入什麼流程,即“做什麼”以及“怎麼做”等。
從結構化程式設計角度出發,程式有 3 種結構:順序結構、選擇結構和迴圈結構。
若是在程式中沒有給出特別的執行目標,系統則預設自上而下一行一行地執行該程式,這類程式的結構就稱為順序結構。
到目前為止,我們所編寫的程式都屬於順序結構。
但是事物的發展往往不會遵循早就設想好的軌跡進行,因此,所設計的程式還需要能夠具有在不同的條件下處理不同問題以及當需要進行一些相同的重複操作時,如何能省時省力地解決問題的能力。
在本章中,我們將對 Java 程式中的上述3種流程結構進行學習。
初學者應該對本章的每個小節進行仔細閱讀、思考,這樣才能達到事半功倍的效果。
按照語句的組成部分,可以將順序結構中的語句分為表示式語句、空語句和複合語句 3 大類。
下面首先介紹 Java 中語句的編寫方式,然後對這 3 類語句進行詳細介紹。
在 Java 中,語句是最小的組成單位,每個語句必須使用分號作為結束符。
除此之外,Java 對語句無任何其他限制,開發人員可以很隨意地用符合自己風格的方式編寫語句。
例如,可以將一個語句放在多行中,範例如下:
String str = "Apple " +"Banner "+"Pear " +" Orange";
由於 Java 使用分號作為語句的結束符,所以上面的 3 行程式碼會被 Java 認為是一條語句,因為這 3 行中只有一個分號。
但是,我們不推薦使用這種方式來編寫語句。
同樣,因為使用分號作為分隔符,將多個語句放在一行來編寫也是允許的。
例如,下面的範例程式碼也是正確的。
int a=0,b,c;b=a+10;b++;c=a*b;System.out.println(c);
上面將 5 個語句放在一行中。
為了使程式語句排列得更加美觀、容易閱讀和排除錯誤,一般使用如下規則格式化原始碼。
在一行內只寫一個語句,並採用空格、空行來保證語句容易閱讀。
在每個複合語句內使用 Tab 鍵向右縮排。大括號總是放在單獨的一行,便於檢查是否匹配。
所謂空語句(Empty Statement),它在程式中什麼都不做,也不包含具有實際性的語句。
在程式中,空語句主要用來作為空迴圈體。
空語句的語法格式如下:
; // 其實就是一個分號
執行一個空語句就是將控制轉到該語句的結束點。
這樣,如果空語句是可到達的,則空語句的結束點也是可到達的。
在很多的高階語言中,有專門的賦值語句。
而在 Java 中將賦值作為一個運運算元,因此只有賦值表示式。
在賦值表示式後面新增分號就成了獨立的語句。
以下是一些表示式的範例語句:
3.1415926; (a+b)/2; x*y*z-y+(20-x);
這些表示式能夠被 Java 編譯器識別,但是由於沒有對程式進行任何操作,因此無任何意義。
一般表示式語句應該能完成一個操作,如修改變數的值或者作為函數引數等。
具體方法是,在表示式的左側指定一個變數來儲存表示式的值,或者將表示式傳遞給函數。
以下是修改後的表示式語句:
pi = 3.1415926; output(pi); // 將pi的值傳遞到output()函數中作為引數 sum = (a+b)/2; printf("%f",sum); // 將sum的值傳遞到printf()函數輸出 temp = x*y*z-y+(20-x); // 將表示式的值儲存到temp變數中
複合語句又稱為語句塊,是很多個語句的組合,從而可以將多個語句看作單個語句。
複合語句的語法格式如下:
{ statement-list // 語句列表}
可以看到由一個擴在大括號內的可選 statement-list 組成。
statement-list 是由一個或者多個語句組成的列表,如果不存在 statement-list,則稱該語句塊是空的。
它的執行規則如下:
建立一個語句塊,該語句塊包含 3 條語句。
{ width = 10; // 為width變數賦值 height = 90; // 為height變數賦值 area = width * height; // 計算width變數和height變數的乘積 }
上述程式碼執行後,sum 變數的值為 900。
上述的語句塊中大括號內包含了 3 條語句。
第一條語句為 width 變數賦值,第二條語句為 height 變數賦值,第三條語句則將 width 和 height 相乘,結果儲存在 sum 變數中。
Java 支援兩種選擇語句:if 語句和 switch 語句。
其中 if 語句使用布林表示式或布林值作為分支條件來進行分支控制,而 switch 語句則用於對多個整型值進行匹配,從而實現分支控制。
這些語句允許你只有在程式執行時才能知道其狀態的情況下,控制程式的執行過程。
如果你沒有 C/C++ 的程式設計背景,你將會為這兩個語句的強大功能和靈活性而感到吃驚。
選擇結構(也叫分支結構)解決了順序結構不能判斷的缺點,可以根據一個條件判斷執行哪些語句塊。
選擇結構適合於帶有邏輯或關係比較等條件判斷的計算。
例如,判斷是否到下班時間,判斷兩個數的大小等。
if 語句是使用最多的條件分支結構,它屬於選擇語句,也可以稱為條件語句。
if 選擇結構是根據條件判斷之後再做處理的一種語法結構。
預設情況下,if 語句控制著下方緊跟的一條語句的執行。不過,通過語句塊,if 語句可以控制多個語句。
if 語句的最簡語法格式如下,表示“如果滿足某種條件,就進行某種處理”。
if (條件表示式) { 語句塊;}
其中“條件表示式”和“語句塊”是比較重要的兩個地方。
if 條件語句的執行流程如圖 1 所示。
圖1 if 語句執行流程圖
編寫一個 Java 程式,允許使用者從鍵盤輸入一個數位,再判斷該數是否大於 100。使用 if 語句的實現程式碼如下:
public static void main(String[] args) { System.out.println("請輸入一個數位:"); Scanner input = new Scanner(System.in); int num = input.nextInt(); // 接收鍵盤輸入資料 // 判斷使用者輸入的資料是否大於100 if (num > 100) { System.out.println("輸入的數位大於100"); } // 判斷使用者輸入的資料是否等於100 if (num == 100) { System.out.println("輸入的數位等於100"); } // 判斷使用者輸入的資料是否小於100 if (num < 100) { System.out.println("輸入的數位小於100"); } }
執行該程式,分別使用鍵盤輸入 99、100 和 105,結果如下所示:
請輸入一個數位:
99
輸入的數位小於100
請輸入一個數位:
100
輸入的數位等於100
請輸入一個數位:
105
輸入的數位大於100
假設有 num1 和 num2 兩個變數,它們的值分別是 50 和 34。
下面編寫程式,要求使用 if 語句判斷 num1 和 num2 的大小關係,並輸出比較結果。
實現程式碼如下:
public static void main(String[] args) { int num1 = 50; int num2 = 34; if (num1 > num2) { System.out.println("num1大於num2"); } if (num1 == num2) { System.out.println("num2等於num2"); } if (num1 < num2) { System.out.println("num1小於num2"); } }
該段選擇語句判斷了 num1 值和 num2 值的大於、等於和小於關係。此處 num1 為 50,num2 為 34,所以執行後會輸出“num1 大於 num2”。
在上述兩個案例程式碼中,由於每個 if 語句的語句塊中只包含一條語句,所以省略了大括號。
本範例在登入系統中要求使用者名稱、密碼和驗證碼都必須正確,否則將顯示登入失敗及錯誤提示。
其中的語句塊有多條語句,所以需要使用大括號。程式碼如下:
public static void main(String[] args) { String username = "admin"; // 使用者名稱 String userpass = "123456"; // 密碼 String code = "0000"; // 驗證碼 if (username != "admin" && userpass != "123456" && code != "0000") { System.out.println("登入失敗!"); System.out.println("請檢查輸入的使用者名稱、密碼和驗證碼是否正確!"); } }
在這裡為 if 語句設定了一個複雜的複合表示式來驗證登入條件。執行後的輸出結果如下:
登入失敗!
請檢查輸入的使用者名稱、密碼和驗證碼是否正確!
單 if 語句僅能在滿足條件時使用,而無法執行任何其他操作(停止)。
而結合 else 語句的 if 可以定義兩個操作,此時的 if…else 語句表示“如果條件正確則執行一個操作,否則執行另一個操作”。
使用 if…else 語句的語法格式如下所示:
if (表示式) { 語句塊1; } else { 語句塊2; }
在上述語法格式中,如果 if 關鍵字後面的表示式成立,那麼就執行語句塊 1,否則的話則執行語句塊 2,其執行流程如圖 2 所示。
圖2 if…else 執行流程
在例 3 中為實現比較 num1 和 num2 的大小,使用了 3 個 if 條件語句分別判斷大於、等於和小於的情況。
下面使用 if…else 雙條件來實現,具體程式碼如下:
public static void main(String[] args) { int num1 = 50; int num2 = 34; // 如果num1等於num2 if (num1 == num2) { System.out.println("num1等於num2"); } // 如果num1大於num2 if (num1 > num2) { System.out.println("num1大於num2"); } else { // 否則就是num1小於num2 System.out.println("num1小於num2"); } }
雙條件語句減少了程式碼的編寫量,同時增強了程式的可讀性。
簡化後的結果還是一樣,執行後會輸出“num1 大於 num2”。
if 語句的主要功能是給程式提供一個分支。
然而,有時候程式中僅僅多一個分支是遠遠不夠的,甚至有時候程式的分支會很複雜,這就需要使用多分支的 if…else if 語句。
通常表現為“如果滿足某種條件,就進行某種處理,否則如果滿足另一種條件才執行另一種處理……,這些條件都不滿足則執行最後一種條件”。
if…else if 多分支語句的語法格式如下所示:
if(表示式1) { 語句塊1; } else if(表示式2) { 語句塊2; ... } else if(表示式n) { 語句塊n; } else { 語句塊n+1; }
可以看出,else-if 結構實際上是 if-else 結構的多層巢狀。
明顯的特點就是在多個分支中只執行一個語句組,而其他分支都不執行,所以這種結構可以用於有多種判斷結果的分支中。
在使用 if…else if 語句時,依次判斷表示式的值,當某個分支的條件表示式的值為 true 時,則執行該分支對應的語句塊,然後跳到整個 if 語句之外繼續執行程式。
如果所有的表示式均為 false,則執行語句塊 n+1,然後繼續執行後續程式,其執行流程如圖 3 所示。
圖3 if…else if 語句的執行流程
同樣以比較 num1 和 num2 的大小為例,使用 if…else if 多條件的實現程式碼如下:
public static void main(String[] args) { int num1 = 50; int num2 = 34; if (num1 == num2) { // 如果num1等於num2 System.out.println("num1等於num2"); } else if (num1 > num2) { // 如果num1大於num2 System.out.println("num1大於num2"); } else { // 否則就是小於 System.out.println("num1小於num2"); } }
如上述程式碼所示,num1 和 num2 不滿足 if 語句的“num1==num2”條件,接著測試 else if 的“num1>num2”條件,滿足該條件並輸出“num1 大於 num2”。
假設某學校對成績的判斷標準是:不低於 90,可以評為優秀;低於 90 但不低於 80,可以評為良好;低於 80 但不低於 60,可以評為中等;否則評為差。
public static void main(String[] args) { System.out.println("請輸入考試成績:"); Scanner input = new Scanner(System.in); int score = input.nextInt(); // 接收鍵盤輸入資料 if (score >= 90) { // 考試成績>=90 System.out.println("優秀"); } else if (score >= 80) { // 90>考試成績>=80 System.out.println("良好"); } else if (score >= 60) { // 80>考試成績>=60 System.out.println("中等"); } else { // 考試成績<60 System.out.println("差"); } }
當考試成績為 90 分以上時,則執行第一個 if 語句,下面的 3 個條件判斷語句不會執行;當考試成績為 80 分以上 90 分以下時,則執行第一個 else if 語句;當考試成績在 60~80 分,並且包含 60 分的成績,則執行第二個 else if 語句;如果上述 3 個條件都不滿足,則執行 else 語句。
程式執行後的輸出效果如下所示:
請輸入考試成績:
100
優秀
請輸入考試成績:
88
良好
請輸入考試成績:
50
差
if 語句的用法非常靈活,不僅可以單獨使用,還可以在 if 語句裡巢狀另一個 if 語句。
同樣,if…else 語句和 if…else if 語句中也可以巢狀另一個 if 結構的語句,以完成更深層次的判斷。
巢狀 if 的語法格式如下:
if(表示式1) { if(表示式2) { 語句塊1; } else { 語句塊2; } } else { if(表示式3) { 語句塊3; } else if(表示式4) { 語句塊4; } else { if(表示式n) { 語句塊n; } else { 語句塊n+1; } } }
在上述格式中,應該注意每一條 else 與離它最近且沒有其他 else 對應的 if 相搭配,其執行流程如圖 4 所示。
圖4 巢狀 if 語句執行流程
活動計劃安排,如果今天是工作日,去上班;如果今天是週末,則出去遊玩;同時,如果週末天氣晴朗,去室外遊樂場遊玩,否則去室內遊樂場遊玩。實現程式碼如下:
public static void main(String[] args) { String today = "週末"; String weather = "晴朗"; if (today.equals("週末")) { if (weather.equals("晴朗")) { System.out.println("去室外遊樂場遊玩"); } else { System.out.println("去室內遊樂場遊玩"); } } else { System.out.println("去上班"); } }
如上述程式碼所示,today 滿足 if 語句的“today.equals(“週末”)”條件,接著測試 weather 是否滿足“weather.equals(“晴朗”)”條件,滿足該條件輸出“去室外遊樂場遊玩”。
到此這篇關於Java流程控制語句最全彙總(上篇)的文章就介紹到這了,其他兩個部分的內容(中、下篇)請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45