前言
還記得在Day3的時候提到的總合計算嗎?
下面這裡就是如何使用for迴圈,來去加總數字。
int sum = 0;
for (int i = 1; i <= 10; i++)
{
sum += i;
}
Console.WriteLine(sum);
這段程式碼將迭代從 1 到 10 的數字,並將它們相加,最後顯示總和,結果也是 55。
但是程式這樣是怎麼跑的??
當初身為初學者的我,當時也嗯….看不懂,for後面那三個是甚麼?啊我知道會迴圈一直跑,所以怎麼跑,誰先跑?是要跑去哪?為什麼這樣就算出來了
那就來一步步解釋,首先解釋for迴圈的使用語法如下
for (initialization; condition; update)
{
// 要執行的程式碼
}
//**initialization** 是初始化語句,用於設定初始值;
//**condition** 是判斷條件,當條件為真時,迴圈繼續執行;
//**update** 是更新語句,用於更新計數器或變數的值,以便下一次迴圈能夠正確執行。
當我們想要重複執行一段程式碼多次時,可以使用 for
迴圈。這個迴圈的結構是透過三個部分來控制的:
換個方式來說,當你想要重複做一樣的事情多次,就像玩疊疊樂一樣,你可以使用一個特殊的"迴圈"工具。這個迴圈就像一個小火車,一直跑來跑去,直到達到一個特別的地方才停下來。
如果把這個小火車拆解成三個部分:
所以,當小火車開始時,它在第 0 站,然後它會檢查停車條件。
如果停車條件是真的(也就是它還沒到達第 5 站),小火車就會向前走一站,再次檢查停車條件。
當停車條件變成假的(也就是它到達了第 5 站),小火車就會停下來。
這樣,小火車就完成了它的任務,這就是迴圈的概念!它讓你可以輕鬆地一次又一次地完成相同的工作,就像小火車一樣不停地走來走去。
如果好像有一點概念的話,那就再用一個簡單的例子,說明 for 迴圈的工作原理:
// 初始化:宣告一個變數 i,並設定初始值為 0,也就是int i = 0;
// 條件:只要 i 小於 5,就繼續執行迴圈 , i < 5
// 更新:每次迴圈結束後,將 i 增加 1
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
//所以第一個i 是初始值 = 0,判斷i確實<5`,所以會直接先顯示出來
//再來會跳到i++,變成 i = 0+1 =1,判斷i確實<5,所以顯示1
//再來會跳到i++,變成 i = 1+1 =2,判斷i確實<5,所以顯示2
//再來會跳到i++,變成 i = 2+1 =3,判斷i確實<5,所以顯示3
//再來會跳到i++,變成 i = 3+1 =4,判斷i確實<5,所以顯示4
//再來會跳到i++,變成 i = 4+1 =5,判斷i不<5,所以不顯示
這段程式碼會在控制台上輸出數字 0 到 4,因為變數 i
從 0 開始,每次迴圈會增加 1,直到 i
不再小於 5 為止。
剛剛上面簡單的介紹完,要來增加運算摟~
for (int i = 1; i <= 10; i = i + 2)
{
Console.WriteLine(i);
}
這個for迴圈會列印出 1、3、5、7 和 9,因為這些是 1 到 10 之間的奇數數字。
依樣從i=1開始,再跑的每個循環都檢查 i 是否小於或等於 10,如果是的話就繼續執行下面的Console.WriteLine(i);這個動作,這個動作就不用多解釋,之前幾天都有用過就是把放進去當下的變數 i 的值給齣齣呈現在畫面上。
後面我們寫 i = i + 2所以從一開始,每次加2,這樣1印出來以後,變成 3、5、7、9,以此類推。
再來迴圈中間有設定條件會結束的,所以每次跑都會檢查這個條件 i 是否小於或等於 10,如果是對的話繼續執行下一個循環,但如果 i 變成 11,那麼條件就不對啦,迴圈就結束了。
for(int i=1 ; i<=20;i++)
{
Console.WriteLine(2i);
}
這個for迴圈會列印出 2、4、6、…18、 20,因為這些是 1 到 20 之間的偶數數字。
從i=1開始,跑的每個循環都檢查 i 是否小於或等於 20,如果是的話就繼續執行下面的Console.WriteLine(2i);這個動作,裡面的變數 i 會乘以2,再輸出結果呈現 2、4、6…。
後面我們寫 i++ 所以從一開始的 i = 1,每次加1。
再來迴圈中間有設定條件會結束的,所以每次跑都會檢查這個條件 i 是否小於或等於 20,如果是對的話繼續執行下一個循環,但如果 i 變成 21,那麼條件就不對啦,迴圈就結束了。
這裡我們小小的使用
static void Main()
{
for (int i = 1; i <= 20; i++)
{
if (IsEven(i))
{
Console.WriteLine(i);
}
}
}
static bool IsEven(int num)
{
return num % 2 == 0;
}
再寫程式的時候,如果一直重複寫一樣的就會不好維護,因為一個地方要改,其他地方就一直要修改,所以才會在這裡使用副程式。
(先解釋副程式(Subroutine)通常被稱為函數(Function)或方法(Method),是一段獨立的程式碼,它可以被多次調用,並在需要時執行特定的任務或操作。)
那來解釋上面的使用副程式的方法,先定義了一個名為 IsEven 的副程式,它的作用是將輸入的整數乘以2。
然後,我們使用 for 迴圈從1到20迭代,每次迭代中都調用 IsEven 副程式,可以看到我們在if裡面的判斷是寫了(IsEven(i)把 IsEven 副程式呼叫來這裡當成判斷式使用。)透過這種方式來檢查當前數字是否為偶數,如果是偶數,就將其印出。
這樣,我們就能夠印出1到20之間的所有偶數,呈現的結果如下圖所示。
除了可以呈現數字,也可以使用for迴圈創建圖案,通常會使用巢狀的for迴圈,這樣可以更容易地控制圖案的形狀和大小。
下面是一個簡單的例子,使用巢狀的for迴圈來創建一個簡單的星號圖案,這個圖案具有三個星號的高度和寬度:
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Console.Write("*");
}
Console.WriteLine(); // 在每行結束後換行
}
可以看到使用兩個for迴圈,外部的迴圈(i從0到2,總共3個)用於控制行數,內部的迴圈(j從0到2)用於在每行上打印星號。
在內部迴圈完成後,我們使用 Console.WriteLine()
來換行,以便下一行可以開始。可以看到結果呈現如下圖。
在我去面試工作的時候,有遇到需要手寫考99乘法表的題目。99乘法表是一個經典的例子,使用for迴圈可以輕鬆生成這個表。
那就使用巢狀for迴圈生成99乘法表的例子:
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= 9; j++)
{
int result = i * j;
Console.Write($"{i} x {j} = {result}\t");
}
Console.WriteLine(); // 在每行結束後換行
}
跟上面印出星星的方式很像,一樣使用兩個for迴圈,只是外迴圈數量變成(i從1到9)用於控制行數,內迴圈(j從1到9)用於計算每一行的乘法表達式然後把結果印出來。
因為不是只要印出圖案或一個字即可,所以我們Console.Write()來印出表達式,使用Day3教字串插值,$"{i} x {j} = {result}\t"是一個格式化的字串,包含i、j和它們的乘積。
在內部迴圈完成後,我們使用 Console.WriteLine() 來換行,以便下一行可以開始。
下圖就是印出來的內容呈現的樣子。
關於使用的格式化字串,這裡再重複前面有教到的印象(格式化字串是一種特殊的字串,在Day3的時候有提到一些也就是有使用到像是字串插值或是string.Format的部分。)讓我們來解釋這個具體的例子:
$"{i} x {j} = {result}\t"
$
符號:在字串的開頭,它表示這是一個插補字串(interpolated string),可以包含變數或運算式,並將它們嵌入到字串中。{}
大括號:大括號用於定義要插入到字串中的變數或運算式。在這個字串中,有三對大括號。i
、j
、result
:這些是變數或運算式的名稱,它們的值將被插入到對應的大括號中。x
、=
、\t
:這些是字串中的文字內容,它們將直接顯示在最終的格式化字串中。當這個格式化字串被處理時,大括號內的變數或運算式將被計算並插入到對應的位置,以生成最終的字串。例如,如果 i 的值為 5、 j 的值為 3,並且 result 的值為 15,則這個格式化字串將生成以下字串:
5 x 3 = 15 // 使用制表符(\t)添加了一個定位製表符
一樣都是迴圈但while跟for使用的狀況不同,除了這兩個還有do…while。
while 通常用在不知道跑幾圈,跑到對為止。
for是知道有幾圈的時候使用。
do…while無論如何先跑一次,在決定是否要在跑一次
當你不確定要執行多少次迭代時, while 迴圈是一個很好的選擇。
像是下面的例子,使用Console.WriteLine不斷地詢問使用者是否要繼續,直到使用者輸入"no"為止。
string input;
while (true)
{
Console.WriteLine("繼續嗎?(yes/no)");
input = Console.ReadLine();
if (input.ToLower() == "no")
{
break; // 如果輸入是 "no",則退出迴圈
}
}
Console.WriteLine("程式結束");
這個程式用 while 迴圈,並在迴圈的條件中用 true ,這意思就是因為都一直是對的,所以沒有打斷就會變成無窮迴圈一直運行,直到裡面有加上 break ,當break被調用就會退出迴圈。
在每次迭代中都問使用者是否繼續,並且讀使用者輸入的內容。
直到輸入是 "no",則調用 break 退出迴圈,不然就會一直跑迴圈。(如果在迴圈中使用 break 時,就會立即結束迴圈的執行,不再執行剩餘的迴圈,只要滿足某種條件的時候就可以使用的。)
可以看到下圖,只要使用者輸入yes就會再詢問一次,如果使用者輸入後就會跳出迴圈,執行外面的程式碼,所以才會印出程式結束。
迴圈部分解釋到這裡,那就要好好的來,解釋最開頭我們提出來關於1加到10 使用的for 迴圈總和了。
這段程式碼使用了一個 for 迴圈,其目的是計算並列印出 1 到 10 之間所有整數的總和。
int sum = 0; // 初始化一個整數變數 sum 並設為 0
先宣告了一個整數變數 sum ,並把這個值初始值設為 0。因為這個變數後面要用來儲存最終的總和。
for (int i = 1; i <= 10; i++) // 使用 for 迴圈
{
sum += i; // 在每個迴圈迭代中,將 i 的值加到 sum 上
}
這個 for 迴圈 有三個主要部分:
在每個迴圈迭代中執行下面這些操作:
最後,迴圈結束後,使用 Console.WriteLine(sum) 將變數 sum 的值印出,即印出了 1 到 10 之間所有整數的總和。在這個例子中,1 + 2 + 3 + ... + 10 的總和等於 55,因此程式會輸出 55。
以上就是關於迴圈的簡易使用方法啦~
第五天挑戰完成,幸好來得及在今天趕上~