1 / 193

第 8 章

第 8 章. 陣列. 本章重點提要. 8-1 陣列的基本觀念與用法 8-2 陣列進階 8-3 ListBox ( 清單方塊 ) 控制項 8-4 ComboBox ( 下拉式清單方塊 ) 控制項. 本章閱讀建議. 本章閱讀建議新觀念 Microsoft Visual Basic 程式設計陣列是一種儲存資料的結構 , 經常用於多筆資料的處理工作中 , 可以說是變數的功能延伸 , 是提升程式效率一定要會的基礎。底下是本章各節的閱讀建議:. 本章閱讀建議.

sachi
Download Presentation

第 8 章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第 8 章 陣列

  2. 本章重點提要 • 8-1陣列的基本觀念與用法 • 8-2 陣列進階 • 8-3 ListBox (清單方塊) 控制項 • 8-4 ComboBox (下拉式清單方塊) 控制項

  3. 本章閱讀建議 • 本章閱讀建議新觀念 Microsoft Visual Basic 程式設計陣列是一種儲存資料的結構, 經常用於多筆資料的處理工作中, 可以說是變數的功能延伸, 是提升程式效率一定要會的基礎。底下是本章各節的閱讀建議:

  4. 本章閱讀建議 • 8-1 陣列的基本觀念與用法:陣列對初學者來說可能比較陌生, 學習的重點在於如何宣告陣列、以及如何存取陣列中的資料。讀者只要跟著上機實例操作, 很快就能熟悉陣列的基本用法。 • 8-2 陣列進階:陣列的進階用法包含:排序、搜尋、二維陣列...等, 在進階程式設計中, 這些主題經常會被用到。本節的上機實例比較難一點, 但多花點時間學習卻是值得的。

  5. 本章閱讀建議 • 8-3 ListBox (清單方塊) 控制項:ListBox 是一種『可以顯示多項資料供使用者選取』的控制項, 具備了單選、複選、排序、搜尋...等功能, 閱讀時建議透過上機實例來瞭解這些功能。 • 8-4 ComboBox (下拉式清單方塊) 控制項:ComboBox 就是將TextBox 及 ListBox 組合起來的控制項, 讓使用者可以用打字或選取的方式來輸入資料。學會 ListBox 後再來學 ComboBox,應該會覺得很輕鬆才對。

  6. 8-1 陣列的基本觀念與用法 • 陣列 (Array) 與變數一樣, 都是用來儲存資料, 所不同的是每一個變數只能儲存一項資料, 而每一個陣列則可儲存多項的資料。

  7. 陣列的宣告與使用 • 陣列必須先宣告才能使用, 宣告的格式和變數很像, 例如: • 最簡單的陣列宣告格式是:

  8. 陣列的宣告與使用 • 其中 N 代表最後一項資料的編號, 例如:

  9. 陣列的宣告與使用 • 一旦宣告了陣列, 我們就可以使用『陣列名稱(編號)』的方式, 來存取陣列中指定編號的資料項, 例如:

  10. 陣列的宣告與使用 • 在術語上, 陣列中的每一個資料項叫做一個『元素』(Element), 用來指定某一個元素的 0、1、2、... 編號, 則叫做『索引』(Index)或『註標』(Subscript), 如下圖所示: • 請注意, Dim X(4) 所宣告的陣列是包含 5 個元素 (索引 0~4), 而非 4個元素喔!

  11. 指定陣列的資料型別 • 在宣告陣列時也可以用 As 來指定資料型別, 其寫法就和宣告變數一樣, 例如:

  12. 指定陣列的資料型別 • 在宣告陣列時指定資料型別, 會有什麼好處?(可複選) (1) 在存取陣列中的元素時, 會比較有彈性。 (2) 可以提升執行效率。 (3) 程式比較不容易出錯。 (4) 讓程式變得比較複雜, 以避免被別人看懂。

  13. 指定陣列的資料型別 (2)、(3) 不宣告型別時, 在使用上會比較有彈性, 因為可以將任意型別的資料存入陣列元素中。若將陣列宣告為特定型別, 則只能存入該型別的資料, 因此彈性較低;但也由於型別固定, 所以執行效率會比較好, 同時也可避免存入錯誤型別的資料, 例如將字串資料存入成績陣列中, 那麼在比較成績時 "100" 會小於 "99" (因為字串是由第 1個字元開始比較)!

  14. 陣列的型別 vs 陣列中元素的型別 • 當我們宣告了陣列的型別時, 例如: • 那麼 X 陣列中的每個元素 (X(0)、X(1)) 都是 String 型別, 而 X 陣列本身則為『String()』型別。換句話說, 在型別名稱後面加上 (), 就表示其為陣列的型別,例如 Byte()、Integer() 等。

  15. 陣列的型別 vs 陣列中元素的型別 • 另外, 陣列的大小與陣列型別無關, 例如:

  16. 使用陣列的注意事項 • 使用陣列時應注意以下幾件事: • 不能夠一次讀取或指定整個陣列的資料, 例如:

  17. 使用陣列的注意事項 • 存取陣列中的元素時, 所指定的索引不能超出陣列的索引範圍,例如:

  18. 陣列的優點 • 陣列的優點, 就是可以把多個資料項排列起來, 然後用數值的編號(索引) 來存取。例如, 我們將 5 項資料放到 5 個變數裡面, 那麼要輸出時就必須一一指定變數名稱:

  19. 陣列的優點 • 如果我們把這 5 項資料放在陣列裡面, 那麼只需要一個 For 迴圈就可以把它們全部輸出了, 例如:

  20. 陣列的優點 • 而即使資料的項數多達 100 項, 也只要將上述程式 For 敘述中的 4 改成 99, 就可輸出全部的資料;但若換成輸出 100 個變數可就累了。 • 寫一主控台程式可輸入 5 份數值資料, 然後顛倒順序輸出這 5 份資料。 • 建立主控台應用程式專案 Ch08-01。 • 在程式模組中輸入以下程式:

  21. 陣列的優點

  22. 陣列的優點 • 執行程式, 假設依序輸入 10, 20, 30, 40, 50 五份資料, 則程式執行結果如下: 在以上程式中, 我們使用 Val() 函式將輸入的資料轉換為數值。請注意第二個 For 迴圈要加上『Step -1』, 否則程式不會進入該迴圈執行!

  23. 陣列的優點 • 寫一程式輸入 5 個數值資料, 輸入完畢後, 輸出這 5 個數值的最大值及最小值。 • 建立主控台應用程式專案 Ch08-02。 • 在程式模組中輸入以下程式:

  24. 陣列的優點

  25. 陣列的優點 • 執行程式, 假設依序輸入 10, 100, -99, 345, 50 五份整數,則程式執行結果如下:

  26. 陣列的優點 一開始還不知道最小值 (Min) 及最大值 (Max), 所以先將陣列第 0個元素視為最小值及最大值;接著, 就用迴圈來與第 1~4 個元素比較, 如果有更小的值則將之設為最小值, 如果有更大的值則將之設為最大值。當所有的元素都比完之後, 就可將最小值 (Min) 及最大值 (Max) 顯示出來了。

  27. 陣列的優點 • 想想看, 如果修改第 2 及 6 行的程式: 然後重新執行程式, 並輸入同樣的資料, 猜猜看結果如何?結果最小值為 -99, 但最大值卻是 50 (而不是 345), 這是為什麼呢?

  28. 陣列的優點 Console.ReadLine() 會讀入『字串』資料, 由於在宣告陣列及變數時沒有指定型別, 因此輸入的字串會直接存入陣列中並拿來做比較, 而在比較字串時 "50" 會大於 "345", 所以最大值會變成 "50", 而不是 "345"。

  29. 陣列的初值設定 • 就像變數可以在宣告時指定初值一樣, 陣列也不例外, 請看以下實例: • 設定的方式是將所有資料以逗號分隔, 然後寫在 { } 裡面。不過請注意, 指定初值時, 不能再指定最大索引值:

  30. 陣列的初值設定 • 當指定初值時, VB 會自動計算元素個數, 以上面的 X 陣列來說, 其元素有 3 個, 因此索引範圍是 0~2。另外, 陣列的型別並不受初值的影響, 這一點和變數不同, 例如底下我們用 Typename() 函式來查看型別:

  31. 陣列的初值設定 • 陣列的型別名稱後面必須加小括號, 例如『String()』就是指『字串陣列』型別。在 String() 型別的陣列中, 每個元素均為 String 型別。

  32. 陣列的初值設定 • 顯示春、夏、秋、冬四季的中英文對照表。 • 建立 Windows 應用程式專案 Ch08-03。

  33. 陣列的初值設定 • 在表單中加入一 Label 控制項並將其 Font/Size 屬性設為 20:

  34. 陣列的初值設定 • 在表單空白處雙按滑鼠, 建立表單的 Load 事件程序:

  35. 陣列的初值設定 • 按[F5] 鍵執行程式, 即可顯示四季的中英文對照表。

  36. 陣列的初值設定 • 因為中文季節及英文季節的陣列索引範圍是 0~3。那為什麼要將3 改成 Ubound(中文季節) 呢?因為 UBound() 會自動算出陣列後一個元素的索引值! • 以中文季節為例, 最後一個元素的索引是3, 所以 Ubound(中文季節) 就等於 3;使用 UBound 的優點是不用自己計算陣列示素的個數, 以避免不必要的錯誤。

  37. 陣列的初值設定 • 某公司有 5 個員工, 請建立一登入程式, 員工必須輸入正確的『帳號』及『密碼』才能登入。

  38. 陣列的初值設定 • 建立 Windows Form 應用程式專案 Ch08-04。 • 在表單中加入控制項並設定如下:

  39. 陣列的初值設定

  40. 陣列的初值設定 • 雙按 Button1 按鈕, 撰寫程式如下:

  41. 陣列的初值設定

  42. 陣列的初值設定 • 按[F5]鍵實地測試看看。

  43. 陣列的初值設定

  44. 陣列的初值設定 • 建立一主控台程式, 可讓使用者輸入 1~7 的數值, 然後顯示該數值對應到星期幾, 如下圖所示。若輸入 1~7 以外的資料, 則結束程式。

  45. 陣列的初值設定

  46. For Each:不需要計數器的 For 迴圈 • For Each 是 For 迴圈的變形, 可以由陣列中一一取出每一個元素來處理, 寫法如下: • 例如底下是將陣列中所有元素加總起來的程式:

  47. For Each:不需要計數器的 For 迴圈 • 變數 n 也可以在 For Each 之前事先宣告好, 若沒事先宣告則在 For Each 中會自動宣告, 並且可以用 As 來指定型別。 • 寫一程式讓使用者輸入一串以逗號分隔的成績資料, 然後顯示所有成績的筆數、總分、及平均, 如下圖所示。

  48. For Each:不需要計數器的 For 迴圈 • 開啟範例專案 Ch08-05, 我們已準備好所需的表單及控制項:

  49. For Each:不需要計數器的 For 迴圈 • 請雙按 Button1, 建立 Button1.Click 事件程序:

  50. For Each:不需要計數器的 For 迴圈

More Related