Java流程控制語句最全匯總(上篇)
前文
本章是關(guān)于Java流程控制語句的最全匯總,本篇為匯總上篇。
流程是人們生活中不可或缺的一部分,它表示人們每天都在按照一定的流程做事。
比如出門搭車、上班、下班、搭車回家。這其中的步驟是有順序的。
程序設(shè)計也需要有流程控制語句來完成用戶的要求,根據(jù)用戶的輸入決定程序要進(jìn)入什么流程,即“做什么”以及“怎么做”等。
從結(jié)構(gòu)化程序設(shè)計角度出發(fā),程序有 3 種結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
若是在程序中沒有給出特別的執(zhí)行目標(biāo),系統(tǒng)則默認(rèn)自上而下一行一行地執(zhí)行該程序,這類程序的結(jié)構(gòu)就稱為順序結(jié)構(gòu)。
到目前為止,我們所編寫的程序都屬于順序結(jié)構(gòu)。
但是事物的發(fā)展往往不會遵循早就設(shè)想好的軌跡進(jìn)行,因此,所設(shè)計的程序還需要能夠具有在不同的條件下處理不同問題以及當(dāng)需要進(jìn)行一些相同的重復(fù)操作時,如何能省時省力地解決問題的能力。
在本章中,我們將對 Java 程序中的上述3種流程結(jié)構(gòu)進(jìn)行學(xué)習(xí)。
初學(xué)者應(yīng)該對本章的每個小節(jié)進(jìn)行仔細(xì)閱讀、思考,這樣才能達(dá)到事半功倍的效果。
Java語句:Java空語句、復(fù)合語句和表達(dá)式語句
按照語句的組成部分,可以將順序結(jié)構(gòu)中的語句分為表達(dá)式語句、空語句和復(fù)合語句 3 大類。
下面首先介紹 Java 中語句的編寫方式,然后對這 3 類語句進(jìn)行詳細(xì)介紹。
語句編寫方式
在 Java 中,語句是最小的組成單位,每個語句必須使用分號作為結(jié)束符。
除此之外,Java 對語句無任何其他限制,開發(fā)人員可以很隨意地用符合自己風(fēng)格的方式編寫語句。
例如,可以將一個語句放在多行中,示例如下:
String str = "Apple " +"Banner "+"Pear " +" Orange";
由于 Java 使用分號作為語句的結(jié)束符,所以上面的 3 行代碼會被 Java 認(rèn)為是一條語句,因為這 3 行中只有一個分號。
但是,我們不推薦使用這種方式來編寫語句。
同樣,因為使用分號作為分隔符,將多個語句放在一行來編寫也是允許的。
例如,下面的示例代碼也是正確的。
int a=0,b,c;b=a+10;b++;c=a*b;System.out.println(c);
上面將 5 個語句放在一行中。
為了使程序語句排列得更加美觀、容易閱讀和排除錯誤,一般使用如下規(guī)則格式化源代碼。
在一行內(nèi)只寫一個語句,并采用空格、空行來保證語句容易閱讀。
在每個復(fù)合語句內(nèi)使用 Tab 鍵向右縮進(jìn)。大括號總是放在單獨的一行,便于檢查是否匹配。
空語句
所謂空語句(Empty Statement),它在程序中什么都不做,也不包含具有實際性的語句。
在程序中,空語句主要用來作為空循環(huán)體。
空語句的語法格式如下:
; // 其實就是一個分號
執(zhí)行一個空語句就是將控制轉(zhuǎn)到該語句的結(jié)束點。
這樣,如果空語句是可到達(dá)的,則空語句的結(jié)束點也是可到達(dá)的。
表達(dá)式語句
在很多的高級語言中,有專門的賦值語句。
而在 Java 中將賦值作為一個運算符,因此只有賦值表達(dá)式。
在賦值表達(dá)式后面添加分號就成了獨立的語句。
以下是一些表達(dá)式的示例語句:
3.1415926; (a+b)/2; x*y*z-y+(20-x);
這些表達(dá)式能夠被 Java 編譯器識別,但是由于沒有對程序進(jìn)行任何操作,因此無任何意義。
一般表達(dá)式語句應(yīng)該能完成一個操作,如修改變量的值或者作為函數(shù)參數(shù)等。
具體方法是,在表達(dá)式的左側(cè)指定一個變量來存儲表達(dá)式的值,或者將表達(dá)式傳遞給函數(shù)。
以下是修改后的表達(dá)式語句:
pi = 3.1415926; output(pi); // 將pi的值傳遞到output()函數(shù)中作為參數(shù) sum = (a+b)/2; printf("%f",sum); // 將sum的值傳遞到printf()函數(shù)輸出 temp = x*y*z-y+(20-x); // 將表達(dá)式的值保存到temp變量中
復(fù)合語句
復(fù)合語句又稱為語句塊,是很多個語句的組合,從而可以將多個語句看作單個語句。
復(fù)合語句的語法格式如下:
{ statement-list // 語句列表}
可以看到由一個擴(kuò)在大括號內(nèi)的可選 statement-list 組成。
statement-list 是由一個或者多個語句組成的列表,如果不存在 statement-list,則稱該語句塊是空的。
它的執(zhí)行規(guī)則如下:
- 如果語句塊是空的,控制轉(zhuǎn)到語句塊的結(jié)束點。
- 如果語句塊不是空的,控制轉(zhuǎn)到語句列表。當(dāng)控制到達(dá)語句列表的結(jié)束點時,控制轉(zhuǎn)到語句的結(jié)束點。
例 1
創(chuàng)建一個語句塊,該語句塊包含 3 條語句。
{ width = 10; // 為width變量賦值 height = 90; // 為height變量賦值 area = width * height; // 計算width變量和height變量的乘積 }
上述代碼執(zhí)行后,sum 變量的值為 900。
上述的語句塊中大括號內(nèi)包含了 3 條語句。
第一條語句為 width 變量賦值,第二條語句為 height 變量賦值,第三條語句則將 width 和 height 相乘,結(jié)果保存在 sum 變量中。
Java if else分支結(jié)構(gòu)精講
Java 支持兩種選擇語句:if 語句和 switch 語句。
其中 if 語句使用布爾表達(dá)式或布爾值作為分支條件來進(jìn)行分支控制,而 switch 語句則用于對多個整型值進(jìn)行匹配,從而實現(xiàn)分支控制。
這些語句允許你只有在程序運行時才能知道其狀態(tài)的情況下,控制程序的執(zhí)行過程。
如果你沒有 C/C++ 的編程背景,你將會為這兩個語句的強(qiáng)大功能和靈活性而感到吃驚。
選擇結(jié)構(gòu)(也叫分支結(jié)構(gòu))解決了順序結(jié)構(gòu)不能判斷的缺點,可以根據(jù)一個條件判斷執(zhí)行哪些語句塊。
選擇結(jié)構(gòu)適合于帶有邏輯或關(guān)系比較等條件判斷的計算。
例如,判斷是否到下班時間,判斷兩個數(shù)的大小等。
if 結(jié)構(gòu)
if 語句是使用最多的條件分支結(jié)構(gòu),它屬于選擇語句,也可以稱為條件語句。
if 選擇結(jié)構(gòu)是根據(jù)條件判斷之后再做處理的一種語法結(jié)構(gòu)。
默認(rèn)情況下,if 語句控制著下方緊跟的一條語句的執(zhí)行。不過,通過語句塊,if 語句可以控制多個語句。
if 語句的最簡語法格式如下,表示“如果滿足某種條件,就進(jìn)行某種處理”。
if (條件表達(dá)式) { 語句塊;}
其中“條件表達(dá)式”和“語句塊”是比較重要的兩個地方。
- 條件表達(dá)式:條件表達(dá)式可以是任意一種邏輯表達(dá)式,最后返回的結(jié)果必須是一個布爾值。取值可以是一個單純的布爾變量或常量,也可以是使用關(guān)系或布爾運算符的表達(dá)式。如果條件為真,那么執(zhí)行語句塊;如果條件為假,則語句塊將被繞過而不被執(zhí)行。
- 語句塊:該語句塊可以是一條語句也可以是多條語句。如果僅有一條語句,可省略條件語句中的大括號 {}。當(dāng)從編程規(guī)范角度不要省略大括號,省略大括號會使程序的可讀性變差。
if 條件語句的運行流程如圖 1 所示。
圖1 if 語句執(zhí)行流程圖
例 1
編寫一個 Java 程序,允許用戶從鍵盤輸入一個數(shù)字,再判斷該數(shù)是否大于 100。使用 if 語句的實現(xiàn)代碼如下:
public static void main(String[] args) { System.out.println("請輸入一個數(shù)字:"); Scanner input = new Scanner(System.in); int num = input.nextInt(); // 接收鍵盤輸入數(shù)據(jù) // 判斷用戶輸入的數(shù)據(jù)是否大于100 if (num > 100) { System.out.println("輸入的數(shù)字大于100"); } // 判斷用戶輸入的數(shù)據(jù)是否等于100 if (num == 100) { System.out.println("輸入的數(shù)字等于100"); } // 判斷用戶輸入的數(shù)據(jù)是否小于100 if (num < 100) { System.out.println("輸入的數(shù)字小于100"); } }
運行該程序,分別使用鍵盤輸入 99、100 和 105,結(jié)果如下所示:
請輸入一個數(shù)字:
99
輸入的數(shù)字小于100
請輸入一個數(shù)字:
100
輸入的數(shù)字等于100
請輸入一個數(shù)字:
105
輸入的數(shù)字大于100
例 2
假設(shè)有 num1 和 num2 兩個變量,它們的值分別是 50 和 34。
下面編寫程序,要求使用 if 語句判斷 num1 和 num2 的大小關(guān)系,并輸出比較結(jié)果。
實現(xiàn)代碼如下:
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 值的大于、等于和小于關(guān)系。此處 num1 為 50,num2 為 34,所以執(zhí)行后會輸出“num1 大于 num2”。
例 3
在上述兩個案例代碼中,由于每個 if 語句的語句塊中只包含一條語句,所以省略了大括號。
本實例在登錄系統(tǒng)中要求用戶名、密碼和驗證碼都必須正確,否則將顯示登錄失敗及錯誤提示。
其中的語句塊有多條語句,所以需要使用大括號。代碼如下:
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 語句設(shè)置了一個復(fù)雜的復(fù)合表達(dá)式來驗證登錄條件。執(zhí)行后的輸出結(jié)果如下:
登錄失??!
請檢查輸入的用戶名、密碼和驗證碼是否正確!
if-else 結(jié)構(gòu)
單 if 語句僅能在滿足條件時使用,而無法執(zhí)行任何其他操作(停止)。
而結(jié)合 else 語句的 if 可以定義兩個操作,此時的 if…else 語句表示“如果條件正確則執(zhí)行一個操作,否則執(zhí)行另一個操作”。
使用 if…else 語句的語法格式如下所示:
if (表達(dá)式) { 語句塊1; } else { 語句塊2; }
在上述語法格式中,如果 if 關(guān)鍵字后面的表達(dá)式成立,那么就執(zhí)行語句塊 1,否則的話則執(zhí)行語句塊 2,其運行流程如圖 2 所示。
圖2 if…else 運行流程
例 4
在例 3 中為實現(xiàn)比較 num1 和 num2 的大小,使用了 3 個 if 條件語句分別判斷大于、等于和小于的情況。
下面使用 if…else 雙條件來實現(xiàn),具體代碼如下:
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"); } }
雙條件語句減少了代碼的編寫量,同時增強(qiáng)了程序的可讀性。
簡化后的結(jié)果還是一樣,執(zhí)行后會輸出“num1 大于 num2”。
多條件 if-else-if 語句
if 語句的主要功能是給程序提供一個分支。
然而,有時候程序中僅僅多一個分支是遠(yuǎn)遠(yuǎn)不夠的,甚至有時候程序的分支會很復(fù)雜,這就需要使用多分支的 if…else if 語句。
通常表現(xiàn)為“如果滿足某種條件,就進(jìn)行某種處理,否則如果滿足另一種條件才執(zhí)行另一種處理……,這些條件都不滿足則執(zhí)行最后一種條件”。
if…else if 多分支語句的語法格式如下所示:
if(表達(dá)式1) { 語句塊1; } else if(表達(dá)式2) { 語句塊2; ... } else if(表達(dá)式n) { 語句塊n; } else { 語句塊n+1; }
可以看出,else-if 結(jié)構(gòu)實際上是 if-else 結(jié)構(gòu)的多層嵌套。
明顯的特點就是在多個分支中只執(zhí)行一個語句組,而其他分支都不執(zhí)行,所以這種結(jié)構(gòu)可以用于有多種判斷結(jié)果的分支中。
在使用 if…else if 語句時,依次判斷表達(dá)式的值,當(dāng)某個分支的條件表達(dá)式的值為 true 時,則執(zhí)行該分支對應(yīng)的語句塊,然后跳到整個 if 語句之外繼續(xù)執(zhí)行程序。
如果所有的表達(dá)式均為 false,則執(zhí)行語句塊 n+1,然后繼續(xù)執(zhí)行后續(xù)程序,其運行流程如圖 3 所示。
圖3 if…else if 語句的執(zhí)行流程
例 5
同樣以比較 num1 和 num2 的大小為例,使用 if…else if 多條件的實現(xiàn)代碼如下:
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”。
例 6
假設(shè)某學(xué)校對成績的判斷標(biāo)準(zhǔn)是:不低于 90,可以評為優(yōu)秀;低于 90 但不低于 80,可以評為良好;低于 80 但不低于 60,可以評為中等;否則評為差。
public static void main(String[] args) { System.out.println("請輸入考試成績:"); Scanner input = new Scanner(System.in); int score = input.nextInt(); // 接收鍵盤輸入數(shù)據(jù) if (score >= 90) { // 考試成績>=90 System.out.println("優(yōu)秀"); } else if (score >= 80) { // 90>考試成績>=80 System.out.println("良好"); } else if (score >= 60) { // 80>考試成績>=60 System.out.println("中等"); } else { // 考試成績<60 System.out.println("差"); } }
當(dāng)考試成績?yōu)?90 分以上時,則執(zhí)行第一個 if 語句,下面的 3 個條件判斷語句不會執(zhí)行;當(dāng)考試成績?yōu)?80 分以上 90 分以下時,則執(zhí)行第一個 else if 語句;當(dāng)考試成績在 60~80 分,并且包含 60 分的成績,則執(zhí)行第二個 else if 語句;如果上述 3 個條件都不滿足,則執(zhí)行 else 語句。
程序運行后的輸出效果如下所示:
請輸入考試成績:
100
優(yōu)秀
請輸入考試成績:
88
良好
請輸入考試成績:
50
差
嵌套 if 的使用
if 語句的用法非常靈活,不僅可以單獨使用,還可以在 if 語句里嵌套另一個 if 語句。
同樣,if…else 語句和 if…else if 語句中也可以嵌套另一個 if 結(jié)構(gòu)的語句,以完成更深層次的判斷。
嵌套 if 的語法格式如下:
if(表達(dá)式1) { if(表達(dá)式2) { 語句塊1; } else { 語句塊2; } } else { if(表達(dá)式3) { 語句塊3; } else if(表達(dá)式4) { 語句塊4; } else { if(表達(dá)式n) { 語句塊n; } else { 語句塊n+1; } } }
在上述格式中,應(yīng)該注意每一條 else 與離它最近且沒有其他 else 對應(yīng)的 if 相搭配,其執(zhí)行流程如圖 4 所示。
圖4 嵌套 if 語句執(zhí)行流程
例 7
活動計劃安排,如果今天是工作日,去上班;如果今天是周末,則出去游玩;同時,如果周末天氣晴朗,去室外游樂場游玩,否則去室內(nèi)游樂場游玩。實現(xiàn)代碼如下:
public static void main(String[] args) { String today = "周末"; String weather = "晴朗"; if (today.equals("周末")) { if (weather.equals("晴朗")) { System.out.println("去室外游樂場游玩"); } else { System.out.println("去室內(nèi)游樂場游玩"); } } else { System.out.println("去上班"); } }
如上述代碼所示,today 滿足 if 語句的“today.equals(“周末”)”條件,接著測試 weather 是否滿足“weather.equals(“晴朗”)”條件,滿足該條件輸出“去室外游樂場游玩”。
到此這篇關(guān)于Java流程控制語句最全匯總(上篇)的文章就介紹到這了,其他兩個部分的內(nèi)容(中、下篇)請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java OOM 異常場景與排查過程(堆、棧、方法區(qū))
這篇文章主要介紹了Java OOM 異常場景與排查過程(堆、棧、方法區(qū)),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03Springboot集成Proguard生成混淆jar包方式
本文介紹了兩種Java代碼混淆工具:ClassFinal和ProGuard,ClassFinal是一個字節(jié)碼加密工具,但需要額外的加密包,使用復(fù)雜,ProGuard是一款開源的Java代碼混淆工具,可以有效地提高代碼的安全性,但對Spring框架的注解處理不夠完善2024-11-11使用Java?Socket實現(xiàn)GPS定位數(shù)據(jù)處理
在許多應(yīng)用場景中,如車輛追蹤、移動設(shè)備定位等,GPS定位數(shù)據(jù)的實時獲取和處理至關(guān)重要,本文將介紹如何使用Java?Socket編程來接收GPS設(shè)備發(fā)送的數(shù)據(jù)并進(jìn)行處理,需要的朋友可以參考下2024-07-07Java使用Collections.sort()排序的示例詳解
這篇文章主要介紹了Java使用Collections.sort()排序的示例詳解,Collections.sort(list, new PriceComparator());的第二個參數(shù)返回一個int型的值,就相當(dāng)于一個標(biāo)志,告訴sort方法按什么順序來對list進(jìn)行排序。對此感興趣的可以了解一下2020-07-07