天天看點

Java SE 04 循環結構Java SE 04(循環結構)

Java SE 04(循環結構)

1.循環結構語句

循環語句可以在滿足循環條件的情況下,反複執行某一段代碼,這段被重複執行的代碼被稱為循環體語句,當反複執行這個循環體時,需要在合适的時候把循環判斷條件修改為false,進而結束循環,否則循環将一直執行下去,形成死循環。

1.1 循環四要素:

循環初始化:一條或多條語句,這些語句完成一些初始化操作,讓循環開始執行

循環繼續條件:控制循環是否繼續或結束的條件

循環體:需要被循環執行的代碼

循環步長(間距,周期):目前循環和下一次循環之間的差量

2. for 循環

2.1 for 循環具有編寫循環的簡明文法。

2.2 for 循環的文法如下:

for(初始化語句;繼續條件;步長){
	循環體;
}
           

2.3執行流程:

  1. 執行初始化語句
  2. 執行繼續條件判斷執行繼續條件判斷

    如果是true,繼續執行

    如果是false,循環結束

  3. 執行循環體語句
  4. 執行步長
  5. 回到 2 繼續
    Java SE 04 循環結構Java SE 04(循環結構)

2. while 循環

2.1 while 循環在條件為真的情況下,重複地執行語句。

2.2 while循環語句格式:

while(循環繼續條件){
		循環體語句
	}
或
	循環初始化語句
	while(循環繼續條件){
		循環體語句
		步長
	}
           

2.3 執行流程

Java SE 04 循環結構Java SE 04(循環結構)

3. do - while 循環

3.1 do-while 循環和 while 循環基本一樣,不同的是它先執行循環體一次,然後判斷循環繼續條件。

3.2 do-while 循環是 while 循環的變體。它的文法如下:

do {
 循環體 ;
語句(組 );
} while ( 循環繼續條件);
           

3.3 執行流程

  1. 執行循環體
  2. 計算循環繼續條件

    如果計算結果為 true, 則重複執行循環體

    如果為 false,則終止 do-while 循環。

    Java SE 04 循環結構Java SE 04(循環結構)

4.循環結構while語句和for語句的差別

for循環語句和while循環語句可以等價轉換

最大差別:

for循環針對一個範圍判斷進行操作

while循環适合判斷次數不明确操作

5.控制跳轉語句

5.1 關鍵字 break 和 continue 在循環中提供了額外的控制。

5.2 控制跳轉語句break

break的使用場景:

  • 在選擇結構switch語句中
  • 在循環語句中
  • 離開使用場景的存在是沒有意義的

break的作用:

  • 跳出單層循環
  • 跳出多層循環:帶标簽跳出,标簽名:循環語句

5.3控制跳轉語句continue

continue的使用場景:

  • 在循環語句中
  • 離開使用場景的存在是沒有意義的

continue的作用:

  • 退出目前循環,開啟下一次循環,也可帶标簽

5.4控制跳轉語句return

return關鍵字不是為了跳轉出循環體,更常用的功能是結束一個函數,也就是退出一個方法。

跳轉到上層調用的方法。

本質上就是結束目前函數。

6. 關鍵術語

英文 中文
break statement break 語句
continue statement continue 語句
do-while loop do-while 循環
for loop for 循環
infinite loop 無限循環、死循環
input redirection 輸入重定向
iteration 疊代
loop 循環
loop body 循環體
nested loop 嵌套循環
off-by-one error 差一錯誤
output redirection 輸出重定向
posttest loop 後測循環
pretest loop 前測循環
sentinel value 标志值
while loop while 循環

程式設計練習題

  1. (統計正數和負數的個數然後計算這些數的平均值)編寫程式,讀入未指定個數的整數,判斷讀入的正數有多少個,讀入的負數有多少個,然後計算這些輸入值的總和及其平均值(不對 0 計數)。當輸入為 0時,表明程式結束。将平均值以浮點數顯示。

    下面是一個運作示例:

    Enter an integer, the input ends if it is 0:1 2-1 3 0

    Enter

    The number of positives is 3

    The number of negatives is 1

    The total is 5.0

    The average is 1.25

    代碼:
    import java.util.Scanner;
    class Demo4_1{
    	/*
    	資料:正數的個數 負數的個數 總和 平均值
    	指令:
    	1.循環輸入數字
    	2.在輸入的同時計算正數個數 複數個數 總和
    	3.當輸入0時,結束循環
    	4.計算平均值
    	5.輸出
    
    	循環:
    	1.NULL
    	2.while(true)
    	3.4.輸入一個數字 判斷正負
    		3.1 正 正數計數+1
    		3.2 負 負數計數+1
    		3.3 0 退出循環
    		都要進行累加
    	*/
    	public static void main(String[] args){
    		Scanner scanner=new Scanner(System.in);
    		int positiveCount=0;//正數的個數
    		int negativeCount=0;//負數的個數
    		double sum=0;//總和
    		System.out.print("Enter an integer ,the inputs ends if it is 0:");
    		while(true){
    			int num=scanner.nextInt();
    			if(num==0){
    				break;
    			}else if(num>0){
    				positiveCount++;
    			}else{
    				negativeCount++;
    			}
    			sum+=num;
    		}	
    		double average=sum/(positiveCount+negativeCount);
    		System.out.println("The number of positives is "+positiveCount);
    		System.out.println("The number of negatives is "+negativeCount);
    		System.out.println("The total is "+sum);
    		System.out.println("The average is "+average);
    	}
    }
               
  2. class rDemo4_2{
    	public static void main(String[] args){
    		/*
    		1.如何列印:
    				i	j
    		*		1	1
    		**		2	1 2
    		***		3	1 2 3
    		****	4	1 2 3 4
    		*****	5	1 2 3 4 5
    		******	6	1 2 3 4 5 6
    		*/
    		for(int i=1;i<=6;i++){
    			//列印行
    			for(int j=1;j<=i;j++){
    				System.out.print("*");
    			}
    			//換行
    			System.out.println();
    		}
    
    		/*
    		2.如何列印:
    				k	i	j
    		     *	5	1	1
    		    **	4	2	1 2
    		   ***	3	3	1 2 3
    		  ****	2	4	1 2 3 4
    		 *****	1	5	1 2 3 4 5
    		******	0	6	1 2 3 4 5 6
    		*/
    		for(int i=1;i<=6;i++){
    			//列印空格
    			for(int k=1;k<=6-i;k++){
    				System.out.print(" ");
    			}
    			//列印星星
    			for(int j=1;j<=i;j++){
    				System.out.print("*");
    			}
    			//換行
    			System.out.println();
    		}
    		/*
    		3.如何列印:
    				i	j
    		*		1	1	
    		**		2	1 2
    		***		3	1 2 3
    		****	4	1 2 3 4
    		*****	5	1 2 3 4 5
    		******	6	1 2 3 4 5 6		j<=i
    		*****	7	1 2 3 4 5	
    		****	8	1 2 3 4
    		***		9	1 2 3
    		**		10	1 2
    		*		11	1				i+j<=12
    		j<=i&&i+j<=12
    		*/
    		for(int i=1;i<=11;i++){
    			for(int j=1;j<=i&&i+j<=12;j++){
    				System.out.print("*");
    			}
    			System.out.println();
    		}
    
    		/*
    		4.如何列印:
    				k(i-5)	i
    		     *		-4	1
    			* *		-3	2
    		   * * *	-2	3
    		  * * * *	-1	4
    		 * * * * *	0	5
    		  * * * *	1	6
    		   * * *	2	7
    		    * *		3	8
    			 *		4	9
    			y=|x|[-4,4]
    		*/
    		for(int i=1;i<=9;i++){
    			for(int k=1;k<=Math.abs(i-5);k++){
    				System.out.print(" ");
    			}
    			for(int j=1;j<=i&&i+j<=10;j++){
    				System.out.print("* ");
    			}
    			System.out.println();
    		}
    		/*
    		5.如何列印
    					i	j
    		     *		1	    1
    			* *		2	   1 2
    		   *   *	3	  1 2 3
    		  *     *	4	 1 2 3 4
    		 *       *	5	1 2 3 4 5
    		  *     *	6	 1 2 3 4 
    		   *   *	7	  1 2 3
    		    * *		8	   1 2
    			 *		9	    1
    		j==1 j==i i+j==10
    		*/
    		for(int i=1;i<=9;i++){
    			for(int k=1;k<=Math.abs(i-5);k++){
    				System.out.print(" ");
    			}
    			for(int j=1;j<=i&&i+j<=10;j++){
    				if(j==1||i==j||i+j==10){
    					System.out.print("* ");
    				}else{
    					System.out.print("  ");
    				}
    			}
    			System.out.println();
    		}
    		//列印乘法口訣表
    		//1*1=1
    		//2*1=1 2*2=4
    		//3*1 3*2 3*3
    		for(int i=1;i<=9;i++){
    			for(int j=1;j<=i;j++){
    				System.out.printf("%d*%d=%d\t",i,j,i*j);
    			}
    			System.out.println();
    		}
    	}
    }
               
  3. (顯示金字塔)編寫程式,提示使用者輸入一個在1到 15 之間的整數,然後顯示一個金字塔形狀的圖案,如下面的運作示例所示:
    Java SE 04 循環結構Java SE 04(循環結構)
    import java.util.Scanner;
    class Demo4_3{
    	public static void main(String[] argss){
    		Scanner scanner=new Scanner(System.in);
    		System.out.print("Enter the number of lines:");
    		int num=scanner.nextInt();
    		for(int i=1;i<=num;i++){
    			//空格
    			for(int k=1;k<=num-i;k++){
    				System.out.print("  ");
    			}
    			//數字
    			//利用 y= |x|+1 函數
    			for(int j=-(i-1);j<=i-1;j++){
    				System.out.print(Math.abs(j)+1+" ");
    			}
    			System.out.println();
    		}
    	}
    }
               
  4. (列印金字塔形的教字)編寫一個嵌套的 for 循環,列印下面的輸出:
    Java SE 04 循環結構Java SE 04(循環結構)
    代碼:
    class Demo3_17{
    	/*						i		j(2^j)			
    			1				1		0		
    		 1  2  1			2		0  1  0    		
    	  1  2  4  2  1			3		0  1  2  1  0	
       1  2  4  8  4  2  1		4		0  1  2  3  2  1  0			
    
    	4				0  1  2  3  2  1  0			
    	|x|	(-3,3)		3  2  1  0  1  2  3	
    	|x|-3			0 -1 -2 -3 -2 -1  0
    	||x|-3|			0  1  2  3  4  5  6
    	*/
    	
    	public static void main(String[] args){
    		int num=8;
    		for(int i=1;i<=num;i++){
    			//空格
    			for(int k=0;k<num-i;k++){
    				System.out.print("    ");
    			}
    			//數字 
    			//利用y=2^||x|-3| 函數
    			for(int j=-(i-1);j<i;j++){
    				System.out.printf("%4d",(int)(Math.pow(2,Math.abs(Math.abs(j)-i+1))));
    			}
    			System.out.println();
    		}
    	}
    }