Java SE 04(循環結構)
1.循環結構語句
循環語句可以在滿足循環條件的情況下,反複執行某一段代碼,這段被重複執行的代碼被稱為循環體語句,當反複執行這個循環體時,需要在合适的時候把循環判斷條件修改為false,進而結束循環,否則循環将一直執行下去,形成死循環。
1.1 循環四要素:
循環初始化:一條或多條語句,這些語句完成一些初始化操作,讓循環開始執行
循環繼續條件:控制循環是否繼續或結束的條件
循環體:需要被循環執行的代碼
循環步長(間距,周期):目前循環和下一次循環之間的差量
2. for 循環
2.1 for 循環具有編寫循環的簡明文法。
2.2 for 循環的文法如下:
for(初始化語句;繼續條件;步長){
循環體;
}
2.3執行流程:
- 執行初始化語句
-
執行繼續條件判斷執行繼續條件判斷
如果是true,繼續執行
如果是false,循環結束
- 執行循環體語句
- 執行步長
- 回到 2 繼續
2. while 循環
2.1 while 循環在條件為真的情況下,重複地執行語句。
2.2 while循環語句格式:
while(循環繼續條件){
循環體語句
}
或
循環初始化語句
while(循環繼續條件){
循環體語句
步長
}
2.3 執行流程
3. do - while 循環
3.1 do-while 循環和 while 循環基本一樣,不同的是它先執行循環體一次,然後判斷循環繼續條件。
3.2 do-while 循環是 while 循環的變體。它的文法如下:
do {
循環體 ;
語句(組 );
} while ( 循環繼續條件);
3.3 執行流程
- 執行循環體
-
計算循環繼續條件
如果計算結果為 true, 則重複執行循環體
如果為 false,則終止 do-while 循環。
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 循環 |
程式設計練習題
-
(統計正數和負數的個數然後計算這些數的平均值)編寫程式,讀入未指定個數的整數,判斷讀入的正數有多少個,讀入的負數有多少個,然後計算這些輸入值的總和及其平均值(不對 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); } }
-
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(); } } }
- (顯示金字塔)編寫程式,提示使用者輸入一個在1到 15 之間的整數,然後顯示一個金字塔形狀的圖案,如下面的運作示例所示:
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(); } } }
- (列印金字塔形的教字)編寫一個嵌套的 for 循環,列印下面的輸出: 代碼:
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(); } } }