- Java程序設計與實踐教程(第2版)
- 楊麗萍 王薇 張焱焱主編 北京云班科技有限公司副主編
- 1840字
- 2019-07-01 11:10:53
3.3 循環結構

視頻講解
在程序設計中,有時需要反復執行一段相同的代碼,直到滿足一定條件為止。為簡化程序結構,與其他任何計算機語言一樣,Java也提供了循環結構。一個循環結構一般包含4部分內容。
(1)初始化部分(initialization):用來設置循環控制的一些初始條件,如設置計數器等。
(2)循環體部分(body):這是反復執行的一段代碼,可以是單一的一條語句,也可以是復合語句(代碼塊)。
(3)迭代部分(iteration):用來修改循環控制條件,常常在本次循環結束,下一次循環開始前執行,例如,使計數器遞增或遞減。
(4)判斷部分(termination):也稱終止部分。是一個關系表達式或布爾邏輯表達式,其值用來判斷是否滿足循環終止條件。每執行一次循環都要對該表達式求值。
Java中提供了3種循環結構:for循環、while循環和do-while循環。
3.3.1 for語句
當事先知道循環會被重復執行多少次時,可以選擇for循環結構。for循環的一般語法格式如下:
for (初始化;條件;變化的步長) { 語句; }
for循環結構的流程如圖3-5所示。

圖3-5 for循環結構流程圖
具體說明如下:
(1)for循環執行時,首先執行初始化操作,然后判斷條件是否為真,如果滿足,則執行循環體中的語句,最后執行改變步長部分。完成一次循環后,重新判斷條件。
(2)可以在for循環的初始化部分聲明一個變量,它的作用域為整個for循環。
(3)for循環通常用于循環次數確定的情況,但也可以根據循環條件用于循環次數不確定的情況。
(4)在初始化部分和步長部分可以使用逗號語句來進行多個操作,逗號語句是用逗號分隔的語句序列。例如:
for (a=1, b=4; a<b; a++, b--) { System.out.println("a="+a); System.out.println("b="+b); }
知識提示 在C/C++中,逗號是一個運算符,能在任何有效的表達式中使用。但是在Java中,逗號僅僅是一個分隔符,只適用于for循環。
(5)初始化、終止以及步長部分都可以為空語句(但分號不能省),三者均為空的時候,相當于一個無限循環。
【例3-6】 for循環舉例。
//文件名:ForTick.java public class ForTick { public static void main(String args[]){ int n; for (n=10; n>0; n--) System.out.println("tick"+n); } }
3.3.2 案例分析:計算平均成績1
1.案例描述
編寫程序實現以下功能,以學生的各科成績為輸入,利用for循環計算其平均成績。
2.案例分析
根據案例描述中的信息,本案例創建一個程序,求學生各科的平均成績。不妨假設,需計算5個科目的平均成績,利用for循環實現,每次循環輸入一個數值,先計算成績總和,最后除以科目數5,得到各科平均成績。
3.案例實現
本例的代碼如下:
//文件名:AverageGrade.java import java.io.*; public class AverageGrade { public static void main(String args[]) throws IOException{ int score, sum; float avg; sum=0; InputStreamReader ir; BufferedReader in; for (int i=0; i<5; i++) { //下面7行語句的作用是從鍵盤輸入score的值 ir=new InputStreamReader(System.in); in=new BufferedReader(ir); System.out.println("Input score is:"); String s=in.readLine(); score=Integer.parseInt(s); sum=sum+score; } avg=sum/5; System.out.println("Average="+avg); } }
4.歸納與提高
本例中,應掌握for循環的定義的形式和方法。在使用for循環時,通常循環次數已知。
3.3.3 while語句
當不清楚循環會被重復執行多少次時,可以選擇while循環和do-while循環。
while語句首先測試一個表達式,如果表達式的值為真,則會重復執行下面的語句體,直到表達式的值為假。其一般語法格式如下:
while(表達式) { 語句體; }
表達式可以是任何表達式。如果語句體內只有一條語句,花括號可省略。
while循環首先計算表達式的值,當值為真時才去執行循環體中的語句;若首次表達式的值為假,則語句體一次都不會被執行。
while循環結構的流程圖如圖3-6所示。

圖3-6 while循環結構流程圖
【例3-7】 求自然數1~10之和。
//文件名:NumAdd.java public class NumAdd { static final int MAX_INDEX=10; //定義靜態常量 public static void main(String args[]) { int n=MAX_INDEX; int sum=0; while (n>0) { //n>0時,累加求和;否則結束循環 sum+=n; //將自然數n的值加到sum中 n--; //n的值減1成為下一個自然數 } System.out.println("1+2+...+10="+sum); //輸出和 } }
程序的運行結果如下:
1+2+...+10=55
3.3.4 案例分析:計算平均成績2
1.案例描述
創建一個程序,實現計算學生各科成績的平均成績。要求利用while循環實現此案例。
2.案例分析
根據案例描述中的信息,本案例需利用while循環實現,當前學生的科目總數未知,即循環輸入數據的次數未知,故需設定一個循環的結束條件,即在輸入最后一科成績后,輸入一個特殊字符$,以此作為輸入數據的結束符。同時,須在循環內設定一個計數器count,每輸入一科成績,計數器值加1。結束循環后,各科成績的總分存放在sum變量中,科目總數存放在計數器count中,利用sum/count即可計算出學生的平均成績。
3.案例實現
本例的代碼如下:
//文件名:AverageGrade2.java import java.io.*; public class AverageGrade2{ public static void main(String args[]) throws IOException{ int score=0, sum, count=0; String score =null; float avg; sum=0; InputStreamReader ir; BufferedReader in; ir=newInputStreamReader(System.in); in=newBufferedReader(ir); System.out.println("Input score is:"); score =in.readLine(); while (! score.equals('$')){ //下面7行語句的作用是從鍵盤輸入score的值 score=Integer.parseInt(score); sum=sum+score; count++; System.out.println("Input score is:"); score =in.readLine(); } if(count! =0){ avg=sum/count; System.out.println("Average="+avg); }else System.out.println("No numbers here"); } }
4.歸納與提高
本例中,應掌握while循環的定義形式和方法。在使用while循環時,由于循環次數未知,我們需在while循環的條件處設置退出循環的條件,在這一點上與for循環是不同的。在此例中,需要熟悉兩種循環語句使用上的區別。
3.3.5 do-while語句
while循環從頂部開始測試,因此,若初始條件為假,則循環體中的代碼永遠也得不到執行。如果想讓循環體至少執行一次,則需要在循環結構底部進行循環條件測試。do-while語句可以實現“直到型”循環,其一般語法格式如下:
do { 語句體; } while (表達式);
do-while循環結構的流程如圖3-7所示。關于do-while循環結構有以下幾點說明:

圖3-7 do-while循環結構的流程示意圖
(1)do-while結構首先執行循環體,然后終止條件,若結果為true,則循環執行花括號中的語句或代碼塊,直到布爾表達式的結果為false。
(2)與while結構不同的是,do-while結構的循環體至少被執行一次,這是“直到型”循環的特點。
【例3-8】 輸入一個正整數,將各位數字反轉后輸出。
分析:將一正整數反轉輸出,即先輸出個位,然后輸出十位、百位……可采用不斷除以10取余數的方法,直到商數等于0為止,是一個循環過程。由于無論整數是幾,至少要輸出一個個位數,因此可以使用do-while循環結構。
//文件名:IntTurn.java import java.io.*; public class IntTurn{ public static void main(String args[]) throws IOException { int x; //x用來存放由鍵盤鍵入的正整數 //下面7行語句的作用是從鍵盤輸入x的值 InputStreamReader ir; BufferedReader in; ir=new InputStreamReader(System.in); in=new BufferedReader(ir); System.out.println("Input x is:"); String s=in.readLine(); x=Integer.parseInt(s); //下面用do-while循環結構進行反轉輸出 do{ System.out.print(x%10); //除以10取余數輸出 x/=10; //將x刷新為除以10的商 }while (x! =0); //如x(商數)為0則結束循環 System.out.print("\n"); } }
程序的運行結果如下:
Input x is: 1893 3981
- 數字媒體應用教程
- 摩登創客:與智能手機和平板電腦共舞
- Java EE框架整合開發入門到實戰:Spring+Spring MVC+MyBatis(微課版)
- Python金融數據分析
- MySQL數據庫管理與開發實踐教程 (清華電腦學堂)
- Mastering ROS for Robotics Programming
- Oracle GoldenGate 12c Implementer's Guide
- JavaScript程序設計(第2版)
- 軟件項目管理實用教程
- 自學Python:編程基礎、科學計算及數據分析(第2版)
- Mockito Essentials
- Windows Phone 8 Game Development
- ASP.NET Web API Security Essentials
- UI設計基礎培訓教程(全彩版)
- 軟件再工程:優化現有軟件系統的方法與最佳實踐