java九九乘法表foreach循环_Day15-C#-for迴圈VS foreach(例:經典九九乘法表/排版後的九九乘法表)...

電腦在讀程式碼是一行一行讀,讀過去的程式碼就過去了,跟逝去的青春一樣(遠目)。

當你有某段程式需要一直重複做~例如需要重複印出"我這個月一定要減肥成功!"(我就是在說沒毅力的我QQ),你可能需要 Ctrl+C/Ctrl+v Cnsole.WriteLine();12次 (或者不只12次...)。

BUT!!!一但這件事情要重複做100萬次,你總不能人生都浪費在複製貼上上面R~~~

於是,需要重複執行程式碼的區塊,就是出動迴圈的時候了!!!!

四大迴圈

迴圈有分成四種:

1. for:在程式中遇到要重複同樣動作的指令,就要使用迴圈指令。通常用在執行的次數為已知。

2. foreach:通常配合陣列使用,指的是執行陣列的每一個物件,陣列有10個就跑10次,執行次數=陣列長度。

3. while:前測試迴圈,通常用在當需要重複執行同樣動作,且執行的次數為未知時使用。

4. do...while:後測試迴圈,與while相同,但是不管你條件為何,都先執行一次再說。

無論是哪一種迴圈,都可以搭配在switch這篇提到的break、goto、return、throw 或是continue(註)陳述式調整或是結束迴圈

註:continue:將控制權轉移給其所在的封閉式 while、do、for 或 foreach 陳述式的下一個反覆項目。

本篇會先介紹for跟foreach的部分~

for

先來看看for迴圈的結構

for (initializer初始設定式; condition條件; iterator迭代器)

{

陳述式

}

恩....我翻譯了翻譯白話文↓↓↓↓

for(a.變數起始值;b.迴圈存在條件;c.每圈執行後變數的動作)

{

每一圈要執行的內容

}

運作邏輯:進入迴圈後,從a變數起始值開始跑,檢查是否符合b的條件,每圈結束後執行c的動作

a,b,c間用 ; 分開,讓我們來詳細看一下a,b,c的內容

a.變數起始值(initializer初始設定式):

這裡的變數只在for迴圈內用,迴圈外無法存取(除非已經在迴圈外宣告)

變數可以不只一個

b.迴圈存在條件(condition條件):

此條件為True/False的布林運算式。符合條件執行{ }一次,不滿足條件時跳出迴圈

c.每圈執行後變數的動作(iterator迭代器):

針對a部分的變數執行的動作,這樣每跑完一圈才能改變條件狀況,判斷是否不符合b部分條件而離開迴圈

上述a,b,c不一定要存在,例如for(;;)代表無窮迴圈。

for迴圈的層數沒有限制,但越多效率越差。

好,馬上來試寫看看!

題目一: 求N階層,也就是輸入N之後,求1x2x3x...xN。

程式邏輯:

我們先觀察一下,求的結果是從1開始,每次都乘以下一個數,直到要求的數字為止

所以會變成這樣1x(1+1)x((1+1)+1)x(((1+1)+1)+1)....xN

所以我的程式碼:

int answer = 1;

//先給answer一個初始值,由於1乘以任何數都不變,故設定為1

//因為要在for迴圈外讀取answer的結果,所以要宣告在外面

Console.WriteLine("計算1×2×3×…×N,請輸入N=");

int N = Convert.ToInt32(Console.ReadLine());

for (int i = 2; i <= N; i++)

//迴圈從2開始跑,跑到N為止,i每次跑完後+1

//也可以從1開始跑,但是1*1還是1阿沒有必要XD

//不能從0開始跑喔,*0什麼東西都是0了XD

{

answer *= i;

//answer=answer*i;把每一次都乘以i之後賦值給answer

//也就是i=2的時候,執行answer=answer*2。

//於是此時answer=2,i會+1=3

//3如果仍<=N,就再進行一次answer=answer(2)*i(3),直到i不符合<=N的條件為止

}

Console.WriteLine($"answer={answer}");

Console.ReadKey();

好,應該對for有多一點了解了吧?那我們來試著印出99乘法表吧!

題目二:九九乘法表

請印出從2開始的九九乘法表,範例如下圖:

2c7b6e3d80819f298982b5ea2083e7f6.png

好的,一樣先讓我們來觀察一下九九乘法表 i x j = ixj

i從2開始,乘以j從1~9後,就換下一個數繼續乘。也就是我從2開始到9的每個數我都要分別乘以1~9(重複做)

恩...i要動,j也要動,而且都同一個規律。看來是撰寫巢狀迴圈的時候了!!!!

*巢狀迴圈:for裡面包著for

那讓我們來看一下程式碼

for (int i = 2; i < 10; i++)//i從2開始跑,跑到<10為止(也就是跑到9),i每跑一次就+1

{

for (int j = 1; j < 10; j++)//j從2開始跑,跑到<10為止(也就是跑到9),j每跑一次就+1

{

Console.WriteLine($"{i}x{j}={i*j}");

}

}

Console.ReadKey();

上述程式碼一步一步跟著程式碼跑的話會像以下這樣

第一個迴圈i從2開始

接著進入第二個迴圈j從1開始

先輸出2x1=2之後,j+1=2,發現還是符合j<10的條件

i不變,繼續印出2x2=4,然後j+1=3,發現還是符合,於是一直重複3~4的步驟

直到跑到2x9=18,j+1=10之後發現不滿足<10的條件了!於是跳出內層迴圈

而此時i一直維持2,跳出內層迴圈後,外層迴圈第一圈也結束了,於是進行i+1=3,發現符合i<10的條件,所以又進入內層迴圈

反覆重複以上直到i=10跳出迴圈為止

然後你就寫出來了!!!棒棒!!!

看來這個對你來說太簡單了,那我們來小小變化一下

題目三:九九乘法表(變化版)

請輸出如下圖範例

3b7d5f8d1e027130891d3f13c410d44c.png

先給個提示:

b8662328ff0a0694dd2ed5ff5a400411.png

好!開始囉!

解法一

for (int i = 1; i < 10; i += 3)//從1開始跑,每輪跑完後+3(三組分別是1,4,7開頭)

{

for (int j = 1; j < 10; j++)//每輪從1開始跑,跑9次,這裡是要乘的1~9

{

//以下以每一列為輸出單位

Console.Write($"{i:##} * {j:##} = {i * j:##}\t\t");

//輸出每一列第一段,中間加入間隔\t(同tab鍵)排版,並規定輸出為2個字元空間方便對齊

Console.Write($"{(i + 1):##} * {j:##} = {(i + 1) * j}\t\t");

//輸出每一列第二段,中間加入間隔\t排版,並規定輸出為2個字元空間方便對齊

Console.WriteLine($"{(i + 2):##} * {j:##} = {(i + 2) * j}");

//輸出每一列第三段並換行跑下一個j,並規定輸出為2個字元空間方便對齊

}//#字號為數字預留位置符號,注意不會輸出非有效位數的零

Console.WriteLine();//每完成一個i多換行一次,也就是跑完3,6,9換行(每一組)

}

Console.ReadKey();

\t用法請參考跳脫字元

##用法請參考上一篇String.Format

解法二

for (int i = 1; i < 10; i += 3)//分成上中下三個區塊1,4,7,每個區塊開頭差3

{

for (int j = 1; j < 10; j++)//每區塊會從1-9共跑9次

{

for (int k = i; k < (i + 3); k++)//*前方數字每行從i開始,符合

{

Console.Write($"{k:##} * {j:##} = {k * j:##}\t");

//每次輸出不換行但用\t隔開,直到k=(i+3)

}

Console.WriteLine();//不符合k

}

Console.WriteLine();//跑完每一個區塊後換行,也就是i=3,6,9時

}

Console.ReadKey();

foreach

與for用法相同,但不用指定初始值、條件、迭代器。他會將集合中(如陣列)內的所有元素逐一指定給變數,直到每一個元素都處理完畢才離開迴圈。就是元素有幾個就跑幾圈!更詳細的用法會在陣列時說明。

架構如下:

foreach (每一元素 in 陣列)

{

每一圈要執行的內容;

}

有限迴圈就介紹到這啦~

下一篇我們來看看無窮迴圈~

參考資料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值