迴圈用來重複執行某段邏輯。
最常見的兩種是 while loop(不確定次數的迴圈)與 for loop(確定次數,也就是計數迴圈)。
另外還有 for each 迴圈,之後的某個概念會再提到。
for loop 由一個標頭和一段程式區塊組成,程式區塊裡是用大括號包住的迴圈主體。
標頭由 3 個以分號;分隔的元件組成:初始化敘述、條件,以及另一個運算式。
這三個元件都可以是空的。
for (init_statement; condition; expression) {
some_statement;
}
boolean的運算式,用來控制迴圈何時該停止。
只要這個條件的求值結果是true,迴圈內的程式碼就會持續執行。
一旦這個運算式求值為false,迴圈就不會再進行任何疊代。while loop 只要它的條件檢查結果為true,就會一直執行它的主體。
下面的程式碼片段示範如何把for改寫成while loop。
init_statement;
while(condition) {
some_statement;
expression;
}
使用迴圈時,經常需要對記錄疊代次數的計數變數加 1 或減 1。
這種動作實在太常見了,所以遞增與遞減有專屬的運算子:++和--。
它們有前置與後置兩種形式。 前置形式會在敘述中使用變數之前先改變變數,後置形式則是在使用之後才改變。 大多數時候,你想要的應該都是前置形式。
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
for 迴圈:範例_初始化元件_通常用來設定計數變數,_條件_用來檢查迴圈該繼續還是停止,而_後置元件_則通常在每次重複結束時遞增計數器。
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
這個迴圈會把1到9的數字加總(包含9)。
在迴圈主體中,你可以使用break關鍵字來完全停止迴圈的執行:
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
相對地,continue關鍵字只會停止目前這一次疊代的執行,然後繼續進行下一次:
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (i%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
當break和continue的使用降到最低,或完全避免時,迴圈的邏輯通常會比較容易理解。
這兩個關鍵字都會略過程式碼中的某些部分,往往讓人更難跟上。
在這個練習中,你會處理儲蓄帳戶。 每年,你的儲蓄帳戶餘額都會根據利率更新。 銀行給你的利率取決於你帳戶裡的金額(也就是餘額):
0美元:3.213%(餘額會變得更負)。0美元且小於1000美元:0.5%。1000美元且小於5000美元:1.621%。5000美元:2.475%。這個練習共有四個任務,每個任務都會運用到餘額和它的利率。
實作interest_rate函式,根據指定的餘額計算利率:
interest_rate(200.75);
// => 0.5
實作yearly_interest函式,根據指定的餘額計算利息:
yearly_interest(200.75):
// => 1.003750
實作annual_balance_update函式,計算年度餘額更新,並將利率納入考量:
annual_balance_update(200.75);
// => 201.75375
實作years_until_desired_balance函式,計算達到目標餘額所需的最少年數,並考量到每年都會把利息加進餘額中。
這代表一年後的餘額是:起始餘額 + 起始餘額的利息。
第二年後的餘額是一年後的餘額 + 一年後餘額的利息。
依此類推,直到當年的餘額大於或等於目標餘額為止。
double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14
注意,回傳的值是int。