|
5-3 while 迴圈敘述
內容:
5-3-1 while 敘述的流程
圖 5 -4 為 while 敘述的運作流程圖,首先判斷條件是否成立,成立(yes)則執行 while 迴圈實體,否則(no)不執行 while 迴圈,並離開此 while 敘述;當條件成立並執行迴圈實體之後,再測試條件是否成立,如成立則繼續執行迴圈,否則跳離迴圈。
圖 5-4 While 敘述的流程圖
由圖 5-4 可以看出,while 敘述比 for 迴圈簡單了許多,並不設定條件初值,也不計算條件變數的增減量,而僅判斷條件是否成立,來決定是否重複執行迴圈敘述區塊。While 敘述的語法與範例如下:
語法: |
範例: |
while (條件判斷)
{
statement 1;
statement 2;
….
} |
|
5-3-2 範例研討:累加/累乘程式
(A)程式功能:Ex5_3.java
製作一個具有累加與累乘功能的計算器,系統要求輸入一個整數 n,再分別計算 1 累加到 n(sum = 1 +2 + 3 + … +n)與 1 累乘到 n(pro = 1 * 2 * 3 * … * n),並輸出兩則計算結果。期望操作介面如下:
請輸入一個整數
=>20
1+2+3+4+...+20 = 210
1*2*3*... *20 = 2432902008176640000 |
(B)製作技巧研討:
無論採用何種迴圈敘述句,連續累加或累乘程式大致上與圖 5-3 一樣。吾人修改圖 5-3,使其符合 while 迴圈敘述並加入累乘功能,如圖 5-5 所示(陰暗部分)。進入迴圈之前,將計數器設定為 1(count = 1),進入 while 敘述句立即判斷 count 是否小於或等於 10(count <=10),如是則執行累加與累乘的敘述句,計數器也累加 1(count++),之後再回來測試條件是否成立。條件成立(count <=10)則再執行 while 程式區塊,否則離開 while 敘述句。
圖 5-5 while 敘述製作累加/累乘程式
(C)程式範例:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19 |
//Ex5_3.java
import java.util.*;
public class Ex5_3 {
public static void main(String args[]) {
Scanner keyin = new Scanner(System.in);
long sum=0, pro=1, value, k;
System.out.printf("請輸入一個整數
=>");
value = keyin.nextInt();
k=1;
while(k <= value) {
sum = sum + k;
pro = pro * k;
k = k +1;
}
System.out.printf("1+2+3+4+...+%d = %d\n",
value, sum);
System.out.printf("1*2*3*... *%d = %d\n",
value, pro);
}
} |
(D)程式重點說明:
-
第 7
行:『long sum=0, pro=1;』。分別設定累加與累乘之累積器的初始值。
-
第 10
行:『k=1;』。初始值設定,使用於 while 敘述的條件判斷式。
-
第 11~15
行:『while (k <=value) { …..}』。While 敘述句,判斷 k <= value 條件成立的話,則執行迴圈內敘述區塊;否則結束 while 敘述。
-
第 14
行:『k = k+1;』。條件值增量,如果沒有此敘述,while 迴圈將永遠做不完。
5-3-3 範例研討:製作電子算盤
(A)程式功能:Ex5_4.java
早期傳統『柑仔店』大多利用算盤計算『人客』購買商品的總額。它的計算方法是一筆接一筆輸入購買金額,也一筆一筆累計總額,輸入結束後立即得到購買金額多寡。請編寫製作一套模擬算盤程式,吾人可連續輸入購買金額,也能隨時累計總額;再利用輸入價格為『零』,表示結束輸入,並顯示總計金額。期望操作介面如下:
歡迎光臨
==
春嬌柑仔店
==
已購買
0
請輸入產品價格
(0
結束)
=>50
已購買
50
請輸入產品價格
(0
結束)
=>76
已購買
126
請輸入產品價格
(0
結束)
=>230
已購買
356
請輸入產品價格
(0
結束)
=>0
人客您總共買
356
元
謝謝!!
愛過來ㄜ |
(B)製作技巧研討:
如果沒有設定一個關鍵條件,算盤好像會無止境的一直累加不停;本範例利用價格為 0 作為停止計算的關鍵因素,此類型系統利用 while 敘述句,最恰當不過了。吾人將系統重點部份以虛擬碼規劃如下:
導入輸入套件;
宣告相關變數,並設定適當初值;
顯示目前購買小計(total),並要求輸入下一個產品價格;
讀入產品價格(cost);
while (cost > 0 ) {
累計購買小計(total
= total + cost);
顯示目前購買小計(total),並要求輸入下一個產品價格;
讀入產品價格(cost);
}
顯示客戶總購買金額; |
(C)程式範例:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19 |
//Ex5_4.java
import java.util.*;
public class Ex5_4 {
public static void main(String args[]) {
Scanner keyin = new Scanner(System.in);
int total=0, cost;
System.out.printf("歡迎光臨
==
春嬌柑仔店
==\n\n");
System.out.printf("已購買
%d
請輸入產品價格
(0
結束)
=>", total);
cost = keyin.nextInt();
while (cost > 0) {
total = total + cost;
System.out.printf("已購買
%d
請輸入產品價格
(0
結束)
=>", total);
cost = keyin.nextInt();
}
System.out.printf("人客您總共買
%d
元
謝謝!!
愛過來ㄜ\n",
total);
}
} |
5-3-4 自我挑戰:超商收銀機
(A) 程式功能:PM5_2.java
利用算盤結算總額最大缺點是,客戶購買相同產品時,也是需要一個接一個輸入價格。目前超商收銀機大多允許輸入單價及數量,它會自動計算並累加總額。請您幫超商建立一套收銀機系統,系統會連續要求輸入貨品單價與數量,以及顯示目前小計多寡,如果輸入貨品單價為 0 時,表示結束輸入,之後顯示購買總金額。期望操作介面如下:
***
歡迎光臨
春嬌超商
***
累計
0.0
請輸入貨品單價
(0
結束)
=>56
請輸入購買數量
=>2
累計
112.0
請輸入貨品單價
(0
結束)
=>67
請輸入購買數量
=>4
累計
380.0
請輸入貨品單價
(0
結束)
=>238
請輸入購買數量
=>2
累計
856.0
請輸入貨品單價
(0
結束)
=>0
總計
=> 856.0 |
(B)製作技巧提示:
吾人稍微修改 Ex5_4 範例,即可滿足系統要求,虛擬碼重點提示如下:
…
設定購買總額初值(total
=0)
顯示目前購買小計(total),並要求輸入下一個產品價格;
讀入產品價格(cost);
while (cost > 0 ) {
顯示輸入購買數量,並讀取(number);
累計購買小計(total
= total + cost*number);
顯示目前購買小計(total),並要求輸入下一個產品價格;
讀入產品價格(cost);
}
顯示客戶總購買金額; |
|
翻轉工作室:粘添壽
Java 程式設計(一) 含程式邏輯
翻轉電子書系列:
|