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

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
主站蜘蛛池模板: 龙川县| 鄂温| 偏关县| 双流县| 二连浩特市| 万年县| 黄浦区| 淮安市| 柏乡县| 合作市| 奉节县| 海林市| 琼中| 沙湾县| 万全县| 青龙| 班戈县| 邹城市| 同德县| 泾川县| 武隆县| 扬中市| 海兴县| 浙江省| 莱芜市| 清远市| 饶阳县| 商都县| 五莲县| 唐河县| 辽宁省| 昂仁县| 遵化市| 张北县| 平泉县| 深州市| 高尔夫| 太仓市| 武冈市| 玉龙| 应城市|