循環結構(for循環、while循環)


循環結構(for循環、while循環)

1、含義:
   循環語句可以在滿足循環條件的情況下,反復執行某一段代碼,這段被重復執行的代碼被稱為循環體語句;
   當反復執行這個循環體時,需要在合適的時候把循環判斷條件修改為false,從而結束循環,否則循環將一直執行下去,	 形成死循環。
2、分類:
    1、for循環
    2、while循環
        --do...while循環
3、循環語句的組成
    ①初始化語句:
        一條或者多條語句,這些語句完成一些初始化操作。
    ②判斷條件語句:
        這是一個boolean 表達式,這個表達式能決定是否執行循環體。
    ③循環體語句:
        這個部分是循環體語句,也就是我們要多次做的事情。
    ④控制條件語句:
        這個部分在一次循環體結束后,下一次循環判斷條件執行前執行。通過用於控制循環條件中的變量,使得循環在合適的時候結束。

for循環

1、for循環:
    語句格式:
        for(初始化語句;判斷條件語句;控制條件語句){
            循環體語句;
        }
2、執行流程:
    (1)執行初始化語句,只執行了一遍
    (2)執行判斷條件語句,看其結果是true還是false
        如果是false,循環結束。
        如果是true,繼續執行。
    (3)執行循環體語句		//注意:第3步是執行循環體,而不是控制條件語句
    (4)執行控制條件語句
    (5)回到(2)繼續      
3、例:打印10行HelloWorld
            方法一:使用老方法
            public class ForDemo1 {
                public static void main(String[] args) {
                    System.out.println("HelloWorld");
                    System.out.println("HelloWorld");
                    System.out.println("HelloWorld");
                    System.out.println("HelloWorld");
                    System.out.println("HelloWorld");
                    System.out.println("HelloWorld");
                    System.out.println("HelloWorld");
                    System.out.println("HelloWorld");
                    System.out.println("HelloWorld");
                    System.out.println("HelloWorld");
                    
            方法二:利用for循環
            public class ForDemo1 {
                public static void main(String[] args) {
                 for(int i=1;i<=10;i++){
                        System.out.println("HelloWorld");
                    }
                }
            }
            
程序解釋:
		①int i=1; 初始化值的作用,因為我們要打印10句HelloWorld,從第一次開始,所以我們需要定義一個變量			int類型的變量去開始計數,表示第幾次循環
        ②i<=10; 條件判斷語句,這個語句使用控制是否進入循環的條件
        ③i++ 控制循環體中的條件的變化,在這里表示的是,每循環一次,i++
4、 使用for循環的注意事項:
        1、條件判斷語句只能是boolean類型
        2、當循環體的語句只有一條的時候,可以省略大括號,如果循環體的語句有多條的時候,這時候需要添加大括			  號,如果不添加循環語句只針對第一條語句有效(建議,永遠不要省略大括號)
        3、如果在小括號后加分號,默認有一個空語句體,后面的代碼為正常的代碼塊,不參與循環
        4、初始化語句可以不在for循環中的小括號中體現,但是必須在使用之前定義好
        5、條件判斷語句可以刪除,但是刪除之后,就沒有了控制循環結束的條件,就變成了死循環
        6、控制條件語句刪除之后,也變成了死循環,你可以刪除,但是初始化的變量的值一定
            要在循環體中發生變化。
    
以下代碼等價於上述方法二的代碼 :              
               public static void main(String[] args) {
               
                    int i = 1;								
                  for (;i <= 10; ) {		//初始化語句可以不在for循環中的小括號中體現,
                  							//但是必須在使用之前定義好
               System.out.println("數加");
                     i++;					//控制條件語句可以不在for循環中的小括號中,但是一定要放											  //在循環體語句中
                       
                    }
                  }
             }

5、			//需求:利用for循環在控制台輸出1-10

                public class ForTest1 {
                    public static void main(String[] args) {

                        for(int i = 1;i<=10;i++){
                            System.out.println(i);
                        }
                    }
                }
              
            執行結果如下:
                        1
                        2
                        3
                        4
                        5
                        6
                        7
                        8
                        9
                        10

                        Process finished with exit code 0
6、				//需求:利用for循環在控制台輸出10-1

                public class ForTest2 {
                    public static void main(String[] args) {

                        for(int i =10;i>0;i--){
                            System.out.println(i);
                        }
                    }
                }
                
          執行結果如下:
                    10
                    9
                    8
                    7
                    6
                    5
                    4
                    3
                    2
                    1

                    Process finished with exit code 0
7、        		//需求:利用for循環求1-10之和
public class ForTest3 {
            public static void main(String[] args) {

                int sum = 0;            //定義一個變量接收1-10之和,初始值隨便給,一般情況下都是0
                
                for(int i =1;i <=10;i++){	//獲取1-10的數據
                    sum = sum +i;
                }
               
                System.out.println(sum);		//在if語句外來接收這個sum值
            }
}
8、    			 //需求:求出1-100之間的偶數和
            	   分析:
            	  	  ①偶數:與2整除,余數為0
            	  	  ②判斷是否為偶數:a%2==0

public class ForTest4 {
    public static void main(String[] args) {

        int sum =0;                  //第1步:先定義一個變量sum准備來接收他們的和

        for(int i =1;i<=100;i++){    //第2步:獲取1-100的數據
            if(i%2==0){              //第3步:使用if語句來判斷是否為偶數
                sum = sum + i;
            }
        }
        System.out.println(sum);	//第4步:在for循環外,輸出sum
    }
}
 9、           //需求:求出1-100之間的奇數和
                分析:
                    奇數:與2整除,余數為1

public class ForTest5 {
    public static void main(String[] args) {
        int sum =0;                 //第1步:先定義一個變量sum准備來接收他們的和

        for(int i =1;i<=100;i++){   //第2步:獲取1-100的數據
            if(i%2==1){             //第3步:使用if語句來判斷是否為奇數
                sum = sum + i;
            }
        }
        System.out.println(sum);	//第4步:在for循環外,輸出sum
    }
}
10、            //需求:求5的階乘
                 		5!=1*2*3*4*5
public class ForTest6 {
    public static void main(String[] args) {
        int res = 1;        //定義一個變量res來接收他們的相乘結果
                            //因為是相乘,所以定義res不能為0

        for(int i =1;i<=5;i++){		//獲取1-5的數據
            res = res * i;
        }
        System.out.println(res);
    }
}
11、
        		//需求:請在控制台輸出滿足如下條件的五位數
                        個位等於萬位
                        十位等於千位
                        個位+十位+千位+萬位=百位

                分析:
                    1、獲取10000-99999的數據
                    2、獲取獲取個位,十位,百位,千位,萬位
                    3、&&連接三個條件
                    
public class ForTest7 {
    public static void main(String[] args) {

        for(int i =10000;i<=99999;i++){

            int geWei = i%10;       //獲取個位:與10進行取模

            int shiWei = i/10%10;   //獲取十位:先與10進行整除,再與10進行取模

            int baiWei = i/10/10%10; //獲取百位:先與10進行兩次整除,再與10進行取模

            int qianWei = i/10/10/10%10; //獲取千位:先與10進行三次整除,再與10進行取模

            int wanWei = i/10/10/10/10%10;//獲取萬位:先與10進行四次整除,再與10進行取模

            if(geWei==wanWei && shiWei==qianWei && geWei+shiWei+qianWei+wanWei==baiWei){
                System.out.println(i);
            }
        }
    }
}
12、
                需求:請統計1-1000之間同時滿足如下條件的數據有多少個:
                            對3整除余2
                            對5整除余3
                            對7整除余2

                分析:
                    1、定義一個變量統計個數 int num = 0;
                    2、for循環獲取1-1000的數據
                    3、每次循環去判斷該數據是否同時滿足條件,如果滿足,num+1
                    4、輸出num

            public class ForTest8 {
                public static void main(String[] args) {
                 int geShu = 0;

                 for(int i =1;i<=1000;i++){
                     if(i%3==2 && i%5==3 && i%7==2){
                         geShu = geShu +1;
                     }
                 }
                    System.out.println(geShu);
                }
            }

while循環

1、while循環
      語句格式:
        (1)簡化格式:
                    while(關系表達式){
                        循環體語句;
                    }
         (2)完整格式:
                    初始化語句;
                    while(關系表達式){
                        循環體語句;
                        控制條件語句;
                    }
        結論:for循環可以等價轉換為while循環(但不是所有while循環都可以轉換為for循環)

2、執行流程:
           1、先執行初始化語句
           2、判斷關系表達式的結果,
                如果是true,進入while循環,執行循環體內容
                如果是false,就不進入while循環,不執行循環體內容
           3、如果進入循環體內容,執行循環體代碼和控制條件語句
           4、直到關系表達式的結果為false,終止while循環
           
3、死循環介紹:
            for(;;){}
            while(true){}

 4、				//需求:打印10遍HelloWorld
 
 		(1)利用for循環來實現
            public class WhileDemo1 {
                public static void main(String[] args) {
                    for(int i=1;i<=10;i++){
                        System.out.println("HelloWorld");
                    }
                    
		(2)利用while循環來實現
         public class WhileDemo1 {
            public static void main(String[] args) {
                int i=1;
                while (i<=10){
                    System.out.println("HelloWorld");
                    i++;
                }
                
		(3)死循環
		public class WhileDemo1 {
            public static void main(String[] args) {
        int i1 = 0;
        while (true){
            System.out.println("這是死循環"+i1);
            i1++;
        }
5、while循環與for循環的區別:
	(1)for循環結束后,在for循環中定義的初始化變量在外部無法使用;
		while循環結束后,由於初始化值變量是在while循環外部定義的,所以在while循環外部可以訪問到
	(2)for循環實現的是一個范圍內的循環;
		while循環,不知道將來會循環多少次,但總會有個點去停止
		例:每分鍾監控某網頁登錄用戶的情況,直到有非法用戶登錄,統計在此之前的次數
                boolean  flag = true;
                while(flag){
                    if(非法用戶登錄){
                        flag = false;
                    }
                }
6、        需求:我國最高山峰是珠穆朗瑪峰:8848m,我現在有一張足夠大的紙張,厚度為:0.01m。
        		請問,我折疊多少次,就可以保證厚度不低於珠穆朗瑪峰的高度?
        public class WhileTest1 {
   				public static void main(String[] args) {
   				int height = 8848;
       			 int count = 0;		 		 //定義變量表示疊的次數
       			 double houDu = 0.01;		 //初始化語句
       			 
        	while (houDu<=8848){
                houDu = houDu * 2;
                count = count + 1;
            System.out.println("此刻是第"+count+"次疊,此時厚度為:"+houDu);
        }

        System.out.println("折疊了"+count+"次,厚度為:"+houDu);
    }
}

        輸出結果為:
                此刻是第1次疊,此時厚度為:0.02
                此刻是第2次疊,此時厚度為:0.04
                此刻是第3次疊,此時厚度為:0.08
                此刻是第4次疊,此時厚度為:0.16
                此刻是第5次疊,此時厚度為:0.32
                此刻是第6次疊,此時厚度為:0.64
                此刻是第7次疊,此時厚度為:1.28
                此刻是第8次疊,此時厚度為:2.56
                此刻是第9次疊,此時厚度為:5.12
                此刻是第10次疊,此時厚度為:10.24
                此刻是第11次疊,此時厚度為:20.48
                此刻是第12次疊,此時厚度為:40.96
                此刻是第13次疊,此時厚度為:81.92
                此刻是第14次疊,此時厚度為:163.84
                此刻是第15次疊,此時厚度為:327.68
                此刻是第16次疊,此時厚度為:655.36
                此刻是第17次疊,此時厚度為:1310.72
                此刻是第18次疊,此時厚度為:2621.44
                此刻是第19次疊,此時厚度為:5242.88
                此刻是第20次疊,此時厚度為:10485.76
                折疊了20次,厚度為:10485.76

                Process finished with exit code 0

do...while循環

1、語句格式:
       (1) 基本格式
            do {
                循環體語句;
            }while(判斷條件語句);

       (2) 擴展格式(開發中使用擴展格式)
            初始化語句;
            do {
                循環體語句;
                控制條件語句;
            } while(判斷條件語句);
2、例:統計1-10之和
public class DoWhileDemo1 {
    public static void main(String[] args) {
        //統計1-10之和
        int sum = 0;
        int i = 1;
        do {
            sum = sum + i;
            i++;
        } while (i <= 10);

        System.out.println("1-10之和為:" + sum);
    }
}
3、debug查看運行過程:
            (1)先在左邊將你要查看流程的代碼標紅
            (2)右擊debug
            (3)點一次》,執行一次步驟,觀察執行流程和變量值的變化

   debug的好處:
            讓我們更加清晰地明白程序是如何執行的,以及變量是如何變化的
4、 do...while和while區別
        (1)while循環,執行的時候,會先進行一次判斷,如果是true才執行循環體
        (2)do...while循環,執行的時候,會先執行一次循環體內容,然后再判斷是true還是false

        *寫程序優先考慮for循環,再考慮while循環,最后考慮do…while循環*
        
     例:           public class DoWhileDemo3 {
                    public static void main(String[] args) {
                        int i = 0;
                        while (i>0){
                            System.out.println(i);
                            i--;
                        }
                        System.out.println("============do...while循環============");

                        do{
                            System.out.println(i);
                            i--;
                        }while (i>0);

                    }
                }
                
       輸出結果為:
                ============do...while循環============
                0

                Process finished with exit code 0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM