第6章數(shù)組與集合_第1頁(yè)
第6章數(shù)組與集合_第2頁(yè)
第6章數(shù)組與集合_第3頁(yè)
第6章數(shù)組與集合_第4頁(yè)
第6章數(shù)組與集合_第5頁(yè)
已閱讀5頁(yè),還剩68頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

VB.NET程序設(shè)計(jì)實(shí)訓(xùn)教程第6章數(shù)組與集合6.1數(shù)組6.2數(shù)組重定義6.3對(duì)象數(shù)組6.4集合與控件數(shù)組6.5實(shí)訓(xùn)練習(xí)66.1數(shù)組6.1.1數(shù)組的分類1.VB.NET中的數(shù)組分類(1)按數(shù)組的大?。ㄔ貍€(gè)數(shù))是否可以改變可分為:固定大小(定長(zhǎng))數(shù)組、動(dòng)態(tài)(可變長(zhǎng))數(shù)組。(2)按元素的數(shù)據(jù)類型可分為:數(shù)值型數(shù)組(整型、實(shí)型)、字符串?dāng)?shù)組、邏輯型數(shù)組、日期型數(shù)組等,這些都是基本數(shù)據(jù)類型的數(shù)組,數(shù)組類型也可以是Object類型。(3)按數(shù)組的維數(shù)可分為:一維數(shù)組和二維數(shù)組、三維數(shù)組等多維數(shù)組。

2.按作用域分類與變量一樣,數(shù)組按作用域分可為:全局?jǐn)?shù)組(應(yīng)用程序級(jí))、模塊級(jí)數(shù)組和局部數(shù)組(過程級(jí))。(1)全局?jǐn)?shù)組:在標(biāo)準(zhǔn)模塊的聲明部分使用Public聲明,其作用范圍是整個(gè)應(yīng)用程序,可以在應(yīng)用程序的所有模塊中訪問數(shù)組。(2)模塊級(jí)數(shù)組:在模塊的聲明部分使用Private或Dim語(yǔ)句(二者等價(jià))聲明,模塊級(jí)數(shù)組只在聲明它的模塊中可用。(3)過程級(jí)數(shù)組:在過程中使用Dim或Static語(yǔ)句聲明,只能在本過程中使用。使用Static聲明的靜態(tài)數(shù)組,在過程的兩次執(zhí)行之間它的所有元素的值均被保留。6.1.2一維數(shù)組1.一維數(shù)組的聲明數(shù)組的聲明格式為(兩種格式)格式一:Dim數(shù)組名(下標(biāo)上界)?As?<數(shù)據(jù)類型>例如:DimarrData(2)asStringDimarrA(5)AsInteger說明:①按作用域不同,關(guān)鍵字Dim可以換成Public、Static②數(shù)組名的命名規(guī)則與變量的命名規(guī)則相同。③VB.NET數(shù)組下界為0,且不能更改(與舊版本VB不同),數(shù)組的元素個(gè)數(shù)為:下標(biāo)上界+1。④VB.NET中,聲明數(shù)組時(shí),<下標(biāo)上界>值可以是整型常量、變量或表達(dá)式。例如:DimmAsIntegerm=5DimarrA(m)As。⑤聲明數(shù)組時(shí),下標(biāo)上界最好是整型數(shù)據(jù),如果是浮點(diǎn)數(shù),系統(tǒng)會(huì)自動(dòng)四舍五入取整。例如,DimarrA(4.5)AsIntege下標(biāo)上界為5⑥數(shù)組中各元素在內(nèi)存占一片連續(xù)的存儲(chǔ)空間。聲明數(shù)組的第二種格式:

Dim數(shù)組名()As數(shù)據(jù)類型1=New數(shù)據(jù)類型2(<下標(biāo)上界>){}注意:數(shù)據(jù)類型2和數(shù)據(jù)類型1必須相同,下標(biāo)上界后的一對(duì)大括號(hào){}不能省略。①Dim數(shù)組名?As?數(shù)據(jù)類型1()=New?數(shù)據(jù)類型2(<下標(biāo)上界>){}②Dim數(shù)組名=New?數(shù)據(jù)類型2(<下標(biāo)上界>){}例如,以下三種格式是等效的:DimarrA()?AsvInteger=NewInteger(4){}DimarrA?As?Integer()=NewInteger(4){}DimarrA=NewInteger(4){}2.一維數(shù)組的引用引用形式:數(shù)組名(下標(biāo))定義了數(shù)組后可以引用數(shù)組元素,每個(gè)數(shù)組元素有一個(gè)唯一序號(hào),稱為下標(biāo),下標(biāo)可以是整型常量、變量或表達(dá)式。如果下標(biāo)不是整數(shù),系統(tǒng)會(huì)自動(dòng)四舍五入取整。例如,定義兩個(gè)數(shù)組:DimarrA(10),arrB(10)AsInteger則下面的語(yǔ)句都是正確的:arrA(1)=arrA(2)+arrB(1)+5'下標(biāo)是整數(shù)arrA(i)=arrB(i)'下標(biāo)使用變量arrB(i+1)=arrA(i+2)'下標(biāo)使用表達(dá)式引用數(shù)組元素時(shí),VB.BET對(duì)下標(biāo)范圍進(jìn)行檢查,正確的下標(biāo)范圍是0~下標(biāo)上界,超出范圍會(huì)提示相應(yīng)錯(cuò)誤信息——索引超出了數(shù)組界限。3.一維數(shù)組的基本操作(1)數(shù)組的初始化數(shù)組的初始化是指在聲明數(shù)組的同時(shí)為數(shù)組元素賦初值,具體格式有以下兩種:Dim數(shù)組名()?As?數(shù)據(jù)類型={表達(dá)式1,表達(dá)式2,...,表達(dá)式n}Dim數(shù)組名?As?數(shù)據(jù)類型()={表達(dá)式1,表達(dá)式2,...,表達(dá)式n}例如:DimarrA()AsInteger={1,2,3,4,5}注意:①對(duì)數(shù)組進(jìn)行初始化時(shí),不能指定數(shù)組上界。例如,DimarrA(5)AsInteger={1,2,3,4,5},運(yùn)行時(shí)會(huì)提示如下錯(cuò)誤信息“對(duì)于用顯式界限聲明的數(shù)組不允許進(jìn)行顯式初始化”。②數(shù)組長(zhǎng)度由花括號(hào)內(nèi)數(shù)據(jù)個(gè)數(shù)決定。上例中數(shù)組arrA的長(zhǎng)度為5。③如果對(duì)數(shù)組不進(jìn)行顯式初始化,系統(tǒng)會(huì)進(jìn)行隱式初始化。數(shù)值型數(shù)組被初始化為0,字符型被初始化為空串“”,布爾型數(shù)組初始化為False,日期型數(shù)組被初始化為01/01/000100:00:00。格式三:Dim數(shù)組名()As數(shù)據(jù)類型1=New數(shù)據(jù)類型2(){表達(dá)式1,表達(dá)式2,...,表達(dá)式n}例如:DimarrA()AsSingle=NewSingle(){1,2,3,4,5}注意:①用New子句初始化時(shí),數(shù)組名后的圓括號(hào)可以放到數(shù)據(jù)類型1后面,也可以將數(shù)組名后的圓括號(hào)、as和數(shù)據(jù)類型1都省略。②通常數(shù)據(jù)類型2后的圓括號(hào)中不指定下標(biāo)上界,元素個(gè)數(shù)由在大括號(hào){}中提供的數(shù)值個(gè)數(shù)決定。但也可以同時(shí)提供下標(biāo)上界和元素值,此時(shí),必須為數(shù)組的每個(gè)元素都提供初始值,即大括號(hào)中的數(shù)值個(gè)數(shù)必須為下標(biāo)上界+1。如上例的聲明可改為:DimarrA()AsSingle=NewSingle(4){1,2,3,4,5}(2)數(shù)組的整體賦值數(shù)組的整體賦值是指先聲明數(shù)組,然后用賦值語(yǔ)句對(duì)其進(jìn)行整體賦值。格式為:Dim數(shù)組名(下標(biāo)上界n)?As?數(shù)據(jù)類型數(shù)組名={表達(dá)式1,表達(dá)式2,...,表達(dá)式n,表達(dá)式n+1}例:Dim?arrA(4)AsIntegerarrA={1,2,3,4,5}在VB.NET中,也可以用一個(gè)已知數(shù)組給另一個(gè)數(shù)組進(jìn)行一次性賦值,只要這兩個(gè)數(shù)組的數(shù)據(jù)類型相同即可。例如:Dim?arrA(4)?As?Integer={1,2,3,4,5}Dim?arrB(4)?As?IntegerarrB=arrA(3)通過循環(huán)在程序中逐個(gè)為數(shù)組元素賦值在編寫程序時(shí)已經(jīng)能夠確定各元素值的,可以在循環(huán)體中通過賦值語(yǔ)句賦值。例如:Dim?arrA(9)?As?Integer'arrA數(shù)組索引值范圍為0~9Fori=0To9 arrA(i)=i+1'arrA數(shù)組的元各素值分別為1,2,3,...,9,10Nexti如果是在程序運(yùn)行時(shí)給數(shù)組賦值,可以通過TextBox控件或InputBox函數(shù)逐個(gè)輸入數(shù)組各元素值,如果是控制臺(tái)應(yīng)用程序,可以用read或readline來實(shí)現(xiàn)。例如,輸入10個(gè)數(shù),存入到數(shù)組arrA中,代碼為:Dim?arrA(9)?As?IntegerFori=0To9arrA(i)=Val(InputBox("輸入A("&i&")的值"))Nexti(4)數(shù)組的輸出數(shù)組的輸出,不能通過數(shù)組名進(jìn)行整體輸出,只能逐個(gè)輸出數(shù)組元素。具體地,通過循環(huán)結(jié)構(gòu),使用TextBox控件、label控件,或messagebox函數(shù)輸出數(shù)組元素的值。如果是控制臺(tái)應(yīng)用程序,可以用console.write或console.writeline來輸出。例如:Fori=0To9CallMessageBox.Show(A(i))NextI(5)ForEach...Next循環(huán)的使用利用ForEach...Next循環(huán)可以遍歷數(shù)組中的每個(gè)元素,例如:Dim?arrA()?As?string={"A","B","C","D","E"}ForEachstrAsstringInarrA

CallMessageBox.Show(str)Nextstr該語(yǔ)句可以令str依次取數(shù)組arrA中的每個(gè)元素值,遍歷數(shù)組arrA。不論數(shù)組有多少個(gè)元素,代碼都適用。【例6-1】創(chuàng)建一個(gè)窗體應(yīng)用程序,程序運(yùn)行結(jié)果如圖6-1所示。要求定義一個(gè)包含10個(gè)元素的一維數(shù)組,數(shù)組元素值是隨機(jī)產(chǎn)生的10個(gè)100以內(nèi)的整數(shù),求數(shù)組中最大元素及所在位置。實(shí)現(xiàn)步驟:(1)啟動(dòng)VS2013,創(chuàng)建窗體應(yīng)用程序例6-1。(2)按照?qǐng)D6-1所示設(shè)計(jì)應(yīng)用程序界面。修改三個(gè)標(biāo)簽控件、按鈕控件的Text屬性。(3)在代碼窗口中定義模塊級(jí)一維數(shù)組arrA(9)(4)編寫“產(chǎn)生數(shù)組”按鈕的代碼PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.ClickDimiAsIntegerRandomize()TextBox1.Text=""Fori=0To9A(i)=Int(100*Rnd())TextBox1.Text=TextBox1.Text+CStr(A(i))+","NextTextBox1.Text=Mid(TextBox1.Text,1,Len(TextBox1.Text)-1)EndSub(5)編寫“最大值及其位置”按鈕的代碼。PrivateSubButton2_Click(senderAsObject,eAsEventArgs)HandlesButton2.ClickDimMax,IMaxAsIntegerMax=A(0):IMax=0Fori=1To9IfA(i)>MaxThenMax=A(i)IMax=iEndIfNextiTextBox2.Text=Str(Max)TextBox3.Text=Str(IMax)+1EndSub(6)編寫“退出”按鈕代碼。PrivateSubButton3_Click(senderAsObject,eAsEventArgs)HandlesButton3.ClickApplication.Exit()EndSub(7)運(yùn)行程序。6.1.3二維數(shù)組1.二維數(shù)組的聲明聲明二維數(shù)組格式為:格式一:Dim數(shù)組名(下標(biāo)1上界,下標(biāo)2上界)?As?數(shù)據(jù)類型格式二:Dim數(shù)組名數(shù)據(jù)類型(下標(biāo)1上界,下標(biāo)2上界)例如:Dim?arrA(2,3)?As?Single也可以使用

New

子句創(chuàng)建二維數(shù)組,格式為:格式三:Dim數(shù)組名(,)?As?數(shù)據(jù)類型1=New數(shù)據(jù)類型2(下標(biāo)1上界,下標(biāo)2上界){}例如,DimarrB(,)?As?Integer=New?Integer(2,3){}2.二維數(shù)組的引用引用形式:數(shù)組名(下標(biāo)1,下標(biāo)2)'下標(biāo)可以是整型變量、常量或表達(dá)式例如,arrA(1,2)=10arrA(i+2,j)=arrA(2,3)*23.二維數(shù)組的基本操作(1)二維數(shù)組的初始化格式一:Dim數(shù)組名(,)As數(shù)據(jù)類型={{第1行元素初值序列},{第2行元素初值序列},...,{第m行元素初值序列}}在每行的元素初值序列中,各個(gè)數(shù)值要用逗號(hào)分開。例如:DimarrA(,)AsInteger={{1,2,3,4},{5,6,7,8},{9,10,11,12}}采用這種格式對(duì)二維數(shù)組進(jìn)行初始化時(shí),也不能指定數(shù)組的下標(biāo)上界,如果將上述語(yǔ)句改為:DimarrA(2,3)AsInteger={{1,2,3,4},{5,6,7,8},{9,10,11,12}},系統(tǒng)也會(huì)報(bào)錯(cuò)。使用New子句初始化二維數(shù)組的格式為:Dim數(shù)組名(,)As數(shù)據(jù)類型1=New數(shù)據(jù)類型2(下標(biāo)1上界,下標(biāo)2上界){{第1行元素初值序列},{第2行元素初值序列},...,{第m行元素初值序列}}例如,DimarrA(,)AsInteger=NewInteger(,){{1,2,3,4},{5,6,7,8},{9,10,11,12}}DimarrA(,)AsInteger=NewInteger(2,3){{1,2,3,4},{5,6,7,8},{9,10,11,12}}(2)二維數(shù)組的整體賦值對(duì)已定義的m行n列二維數(shù)組,整體賦值格式為:數(shù)組名={{第1行元素初值序列},{第2行元素初值序列},...,{第m行元素初值序列}}其中每一行的初值序列都包含n個(gè)數(shù)值。例如:DimarrA(2,3)AsIntegerarrA={{1,2,3,4},{5,6,7,8},{9,10,11,12}}如果兩個(gè)相同數(shù)據(jù)類型的數(shù)組的維數(shù)和長(zhǎng)度都相等,也可以用一個(gè)數(shù)組給另一個(gè)數(shù)組賦值。例:DimarrA(2,3)AsInteger={{1,2,3,4},{5,6,7,8},{9,10,11,12}}DimarrB(2,3)AsIntegerB=A(3)通過循環(huán)給二維數(shù)組賦值DimarrA(2,3)AsInteger'arrA是3×4的二維數(shù)組Dimi,jAsIntegerFori=0To2'i對(duì)應(yīng)下標(biāo)1,初值為0,終值為下標(biāo)1上界Forj=2To3'j對(duì)應(yīng)下標(biāo)2,初值為0,終值為下標(biāo)2上界arrA(i,j)=i*jNextjNexti如果要在程序運(yùn)行時(shí),逐個(gè)輸入二維數(shù)組的各元素值,可將語(yǔ)句arrA(i,j)=i*j改為由TextBox控件或InputBox函數(shù)輸入元素值。如:arrA(i,j)=Val(InputBox("arrB("&i&","&j&")=?"))(4)二維數(shù)組的輸出通過循環(huán)輸出二維數(shù)組時(shí),也需要雙重循環(huán),外層循環(huán)控制變量對(duì)應(yīng)下標(biāo)1,內(nèi)層循環(huán)控制變量對(duì)應(yīng)下標(biāo)2,在循環(huán)體內(nèi)添加對(duì)應(yīng)的輸出語(yǔ)句。具體數(shù)值可以輸出到TextBox控件、label控件中,或用messagebox函數(shù)輸出數(shù)組元素的值,如果是控制臺(tái)應(yīng)用程序,可以用console.write或console.writeline來輸出。例如:DimarrA(2,3)AsInteger'3×4的二維數(shù)組Dimi,jAsIntegerFori=0To2'i對(duì)應(yīng)下標(biāo)1,初值為0,終值為下標(biāo)1上界Forj=2To3'j對(duì)應(yīng)下標(biāo)2,初值為0,終值為下標(biāo)2上界CallMessageBox.Show(arrA(i,j))NextjNextI【例6-2】定義一個(gè)3行4列整型二維數(shù)組arrA,從鍵盤上輸入各元素值,求最大元素及其所在的位置。實(shí)現(xiàn):創(chuàng)建一個(gè)窗體應(yīng)用程序,編寫窗體的單擊事件過程,代碼如下。PrivateSubForm1_Click(senderAsObject,eAsEventArgs)HandlesMyBase.ClickDima(2,3)AsIntegerDimi,jAsIntegerDimMax,Row,ColAsIntegerFori=0To2Forj=0To3a(i,j)=Val(InputBox("a("&i&","&j&")=?"))NextjNextiMax=a(0,0):Row=0:Col=0Fori=0To2Forj=0To3Ifa(i,j)>a(Row,Col)ThenMax=a(i,j):Row=i:Col=jEndIfNextjNextiCallMessageBox.Show("最大元素是"&Str(Max)&"在第"&Row&"行,"&"第"&Col&"列")EndSub【例6-3】求二維矩陣的轉(zhuǎn)置,即將矩陣的對(duì)應(yīng)行和列的元素互換。程序運(yùn)行界面如圖6-2所示。

ConstM=4,N=4PrivateSubForm1_Click(senderAsObject,eAsEventArgs)HandlesMyBase.ClickDimA(M,N),TempAsFori=0ToMForj=0ToNarrA(i,j)=2*iNextjNextiDimstrAsString=""Fori=0ToMForj=0ToNstr=str&arrA(i,j)&""Nextjstr=str&vbCrLfNextistr=str&vbCrLfFori=0ToMForj=iToNTemp=arrA(i,j)arrA(i,j)=arrA(j,i)arrA(j,i)=TempNextjNextiFori=0ToMForj=0ToNstr=str&arrA(i,j)&""Nextjstr=str&vbCrLfNextiCallMessageBox.Show(str)EndSub【例6-4】編程實(shí)現(xiàn)兩矩陣相乘。

ConstM1=4,N=3,M2=5DimA(M1-1,N-1)AsInteger'聲明M1×N二維A數(shù)組DimB(N-1,M2-1)AsInteger'聲明N×M2二維B數(shù)組DimC(M1-1,M2-1)AsInteger'聲明M×M二維C數(shù)組PrivateSubForm1_Load(senderAsObject,eAsEventArgs)HandlesMyBase.LoadDimi,j,kAsIntegerFori=0ToM1Forj=0ToNA(i,j)=i+j+2TextBox1.Text=TextBox1.Text&(CStr(A(i,j)).PadLeft(3))NextjTextBox1.Text=TextBox1.Text&vbCrLfNextiFori=0ToNForj=0ToM2B(i,j)=i+j+1TextBox2.Text=TextBox2.Text&(CStr(B(i,j)).PadLeft(3))NextjTextBox2.Text=TextBox2.Text&vbCrLfNextiEndSubPrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.ClickFori=0ToM1Fork=0ToM2Forj=0ToNC(i,k)=C(i,k)+A(i,j)*B(j,k)'生成新數(shù)組NextjNextkNextiFori=0ToM1Forj=0ToM2TextBox3.Text=TextBox3.Text&(CStr(C(i,j)).PadLeft(4))NextjTextBox3.Text=TextBox3.Text&vbCrLfNextiEndSub6.1.4多維數(shù)組定義多維數(shù)組的格式為:Dim數(shù)組名(下標(biāo)上界1,下標(biāo)上界2,……)?As?數(shù)據(jù)類型例如:DimarrA(5,5,5)AsInteger’聲明arrA是三維數(shù)組DimarrB(2,6,10,5)AsInteger'聲明arrB是四維數(shù)組多維數(shù)組的操作與二維數(shù)組類似,可以用For循環(huán)的嵌套來處理多維數(shù)組。當(dāng)增加數(shù)組的維數(shù)時(shí),數(shù)組所占的存儲(chǔ)空間會(huì)大幅度增加,所以要慎用多維數(shù)組。6.1.5交錯(cuò)數(shù)組交錯(cuò)數(shù)組是一種特殊的數(shù)組,即數(shù)組中每個(gè)元素的本身又是一個(gè)一維或多維數(shù)組,稱為“數(shù)組的數(shù)組”,即交錯(cuò)數(shù)組1.交錯(cuò)數(shù)組的聲明(1)交錯(cuò)數(shù)組的元素為一維數(shù)組格式一:Dim數(shù)組名(下標(biāo)上界)()?As?數(shù)據(jù)類型采用該格式聲明交錯(cuò)數(shù)組時(shí),數(shù)組名后必須用兩對(duì)圓括號(hào),而且下標(biāo)上界要在第一對(duì)圓括號(hào)中指定。例如,DimarrA(3)()AsString格式二:Dim數(shù)組名()()As數(shù)據(jù)類型1=New數(shù)據(jù)類型2(下標(biāo)上界)(){}例如,DimarrA()()AsString=Newstring(3)(){}'聲明了包含四個(gè)元素的交錯(cuò)數(shù)組,而且四個(gè)元素都是一維數(shù)組。采用格式二聲明交錯(cuò)數(shù)組時(shí),數(shù)組名后的兩對(duì)圓括號(hào)可以放到數(shù)據(jù)類型1后,但下標(biāo)上界只能在數(shù)據(jù)類型2后的第一對(duì)圓括號(hào)中指定。(2)交錯(cuò)數(shù)組的元素為多維數(shù)組如果交錯(cuò)數(shù)組的元素為二維數(shù)組,聲明格式為:格式一:Dim數(shù)組名(下標(biāo)上界)(,)?As數(shù)據(jù)類型

格式二:Dim數(shù)組名()(,)?As數(shù)據(jù)類型1=New數(shù)據(jù)類型2(下標(biāo)上界)(,){}例如,DimarrA(,)?AsInteger={{1,2,3},{4,5,6}}'arrA是2×3的二維數(shù)組DimarrB(,)?As?Integer={{1,2},{3,4},{5,6},{7,8}}'arrB是4×2的二維數(shù)組DimarrAB(1)(,)AsInteger'定義包含2個(gè)元素的交錯(cuò)數(shù)組arrABarrAB(0)=arrA'交錯(cuò)數(shù)組第一個(gè)元素賦值為二維數(shù)組arrAarrAB(1)=arrB''交錯(cuò)數(shù)組第二個(gè)元素賦值為二維數(shù)組arrA如果交錯(cuò)數(shù)組的元素為三維數(shù)組,則聲明格式為:格式一:Dim數(shù)組名(下標(biāo)上界)(,,)?As數(shù)據(jù)類型格式二:Dim數(shù)組名()(,,)?As數(shù)據(jù)類型1=New數(shù)據(jù)類型2(下標(biāo)上界)(,,){}(3)交錯(cuò)數(shù)組的元素為交錯(cuò)數(shù)組如果交錯(cuò)數(shù)組的元素為交錯(cuò)數(shù)組,則聲明格式為:格式一:Dim數(shù)組名(下標(biāo)上界)()()?As數(shù)據(jù)類型格式二:Dim數(shù)組名()()()?As數(shù)據(jù)類型1=New數(shù)據(jù)類型2(下標(biāo)上界)()(){}例如,下列程序段中,arrA就是一個(gè)元素為交錯(cuò)數(shù)組的交錯(cuò)數(shù)組。DimarrA1()AsInteger={1,2,3}'arrA1是上界為2的一維數(shù)組DimarrA2()AsInteger={4,5,6,7}'arrA2是上界為3的一維數(shù)組DimarrA(1)()AsInteger'arrA是由數(shù)組arrA1、arrA2作為元素的交錯(cuò)數(shù)組arrA(0)=arrA1arrA(1)=arrA2DimarrB1()AsInteger={11,22}'arrB1是上界為1的一維數(shù)組DimarrB2()AsInteger={33,44,55}'arrB2是上界為2的一維數(shù)組DimarrB3()AsInteger={66,77,88,99}'arrB3是上界為3的一維數(shù)組DimarrB(2)()AsInteger'arrB是由數(shù)組arrB1、arrB2、arrB3作為元素的交錯(cuò)數(shù)組arrB(0)=arrB1arrB(1)=arrB2arrB(2)=arrB3DimarrAB(1)()()AsInteger'arrAB是上界為1的交錯(cuò)數(shù)組,且兩個(gè)元素都是交錯(cuò)數(shù)組arrAB(0)=arrAarrAB(1)=arrB2.交錯(cuò)數(shù)組的初始化與一般數(shù)組相同,可以在聲明交錯(cuò)數(shù)組的同時(shí)進(jìn)行初始化,例如:DimarrA()()AsInteger={NewInteger(){1,2,3},NewInteger(){4,5,6,7}}對(duì)由一維數(shù)組構(gòu)成的交錯(cuò)數(shù)組初始化,注意大括號(hào)對(duì)中的NewInteger()不能省略。初始化時(shí),也可以采用New子句,上述初始化語(yǔ)句可以改為:Dim?arrA()()?As?Integer=New?Integer(1)(){New?Integer(){1,2,3},NewInteger(){4,5,6,7}}對(duì)由二維數(shù)組構(gòu)成的交錯(cuò)數(shù)組初始化,可以采用以下幾種格式:DimarrAB()(,)AsInteger={NewInteger(,){{1,2},{3,4}},NewInteger(,){{5,6},{7,8},{9,10}}}DimarrAB()(,)AsInteger=NewInteger(1)(,){NewInteger(,){{1,2},{3,4}},NewInteger(,){{5,6},{7,8},{9,10}}}DimarrAB()(,)AsInteger=NewInteger()(,){NewInteger(,){{1,2},{3,4}},NewInteger(,){{5,6},{7,8},{9,10}}}6.2.1動(dòng)態(tài)數(shù)組在VB.NET中,聲明數(shù)組時(shí),聲明格式為:一維數(shù)組:Dim數(shù)組名()As數(shù)據(jù)類型二維數(shù)組:Dim數(shù)組名(,)As數(shù)據(jù)類型三維數(shù)組:Dim數(shù)組名(,,)As數(shù)據(jù)類型對(duì)于多維數(shù)組,可以以此類推進(jìn)行聲明。聲明動(dòng)態(tài)數(shù)組時(shí)需要注意以下幾點(diǎn):①數(shù)組名后的括號(hào)不僅可以放在數(shù)組名后,還可以放在數(shù)據(jù)類型名后,具體為:一維數(shù)組:Dim數(shù)組名As數(shù)據(jù)類型()二維數(shù)組:Dim數(shù)組名As數(shù)據(jù)類型(,)②聲明二維動(dòng)態(tài)數(shù)組時(shí),不能省略數(shù)組名后面小括號(hào)中的逗號(hào)。③對(duì)于動(dòng)態(tài)數(shù)組,由于聲明時(shí)它只是說明了類型,卻沒有在內(nèi)存中分配空間(因?yàn)樵貍€(gè)數(shù)未定),

因此,在它沒有具體實(shí)例化前是不能直接使用的。6.2數(shù)組重定義④也可以使用New子句定義動(dòng)態(tài)數(shù)組,格式為:一維數(shù)組:Dim數(shù)組名()As數(shù)據(jù)類型1=New數(shù)據(jù)類型2(){}二維數(shù)組:Dim數(shù)組名(,)As數(shù)據(jù)類型=New數(shù)據(jù)類型2(){}三維數(shù)組:Dim數(shù)組名(,,)As數(shù)據(jù)類型=New數(shù)據(jù)類型2(){}⑤對(duì)動(dòng)態(tài)數(shù)組,可以進(jìn)行初始化和整體賦值。例如:DimarrA1AsChar()={"n"c,"e"c,"t"c}

'字符數(shù)組arrA1初始化,長(zhǎng)度為3,語(yǔ)句可以改為以下兩條,效果是相同的:DimarrA1()AsChar:arrA1={"n"c,"e"c,"t"c}

Dim

arrA2()AsBoolean={True,True,False,True}

'布爾型數(shù)組arrB初始化,長(zhǎng)度為4。該語(yǔ)句也可以改為以下兩條等效的語(yǔ)句:Dim

arrA2()AsBooleanarrA2={True,True,F(xiàn)alse,True}DimarrD(,)AsInteger'聲明動(dòng)態(tài)二維數(shù)組arrD={{1,2,3,4},{5,6,7,8},{9,10,11,12}}'二維數(shù)組arrD整體賦值除了初始化和整體賦值,對(duì)動(dòng)態(tài)數(shù)組必須用redim重新定義后才能正常使用。6.2.2數(shù)組重定義1.?dāng)?shù)組的重定義格式:ReDim[Preserve]數(shù)組名(上界1[,上界2…])該語(yǔ)句用來重新定義數(shù)組,按定義的上界重新分配存儲(chǔ)單元。當(dāng)重新定義數(shù)組時(shí),數(shù)組中的原有內(nèi)容將被清除,但如果在ReDim語(yǔ)句中使用了Preserve選項(xiàng),則不清除數(shù)組內(nèi)容。使用ReDim重新定義數(shù)組時(shí)需要注意下面幾點(diǎn):①與Dim、Static語(yǔ)句不同,ReDim語(yǔ)句是一個(gè)可執(zhí)行語(yǔ)句,只能出現(xiàn)在過程中。②如果想改變數(shù)組大小又不想丟失原來的數(shù)據(jù),只要在ReDim語(yǔ)句中包含Preserve關(guān)鍵字就可以。③對(duì)于已經(jīng)使用ReDim重定義過的動(dòng)態(tài)數(shù)組,可以使用ReDim再次重新定義,而且再定義的數(shù)組長(zhǎng)度可以增加,也可以減小。④ReDim只能用來重新定義數(shù)組的長(zhǎng)度,不能重新定義數(shù)組的維數(shù),也不能更改數(shù)組的數(shù)據(jù)類型。⑤對(duì)于多維數(shù)組,在使用Preserve關(guān)鍵字時(shí),只能修改最后一維的大小。如果不使用Preserve關(guān)鍵字,數(shù)組每一維的大小都可以更改。⑥由于VB.NET中的數(shù)組都是動(dòng)態(tài)的,即使聲明時(shí)指定了數(shù)組上界,也可以使用ReDim重定義。例如:DimarrB(6)AsInteger={1,2,3,4,5,6,7}ReDimPreservearrB(8)ReDimPreservearrB(5)⑦在VB.NET中所有的數(shù)組都是動(dòng)態(tài)的,可以在任何時(shí)候重新定義數(shù)組的長(zhǎng)度,即使不用redim,可以使用New關(guān)鍵字來對(duì)任何一個(gè)數(shù)組進(jìn)行引用,并且重新定位。Dim

X()

As

Single'在類模塊級(jí)聲明X=New

Single(20){}'相當(dāng)于redimx(20)2.?dāng)?shù)組的清除格式為:Erase數(shù)組名[,數(shù)組名]Erase語(yǔ)句只能出現(xiàn)在過程級(jí)別,只能在過程中而不是在類或模塊級(jí)釋放數(shù)組。Erase語(yǔ)句等效于將Nothing分配給每一個(gè)數(shù)組元素。如果數(shù)組是數(shù)值型的,則把數(shù)組中的所有元素置為0;如果是字符串?dāng)?shù)組,則把所有元素置為空字符串。

6.2.3與數(shù)組操作有關(guān)的幾個(gè)系統(tǒng)函數(shù)(1)IsArray()函數(shù)IsArray(varName)用來判斷參數(shù)varName是否為數(shù)組,如果是數(shù)組,返回True,否則返回False。(2)Ubound()函數(shù)和Lbound()函數(shù)格式:UBound(<數(shù)組名>[,<N>])LBound(<數(shù)組名>[,<N>])這兩個(gè)函數(shù)分別用來確定數(shù)組某一維的上界和下界值。其中N是可選的,一般是整型常量或變量,用于指定返回哪一維的上界或下界。1表示第一維,2表示第二維,以此類推。N的默認(rèn)值是1,即Ubound(aa)與UBound(aa,1)等價(jià)。

(3)Split()函數(shù)格式:Split(<字符串表達(dá)式>[,<分隔符>])該函數(shù)可將一個(gè)字符串以某個(gè)指定符號(hào)為分隔符,分離為若干個(gè)子字符串,賦值給一個(gè)一維數(shù)組。例如:DimarrA()AsString'聲明一個(gè)字符串?dāng)?shù)組s="ab/cd/ef/ghijk"'以/為分隔符arrA=Split(s,“/“)【例6-5】按照?qǐng)D6-4所示界面設(shè)計(jì)一個(gè)拆分字符串的應(yīng)用程序,程序可以按照用戶指定的分隔符拆分字符串并輸出。PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.ClickDimarrS()AsStringarrS=Split(TextBox1.Text,TextBox2.Text)ForEachssInarrSTextBox3.Text=TextBox3.Text&ss&""NextEndSub6.3對(duì)象數(shù)組6.3.1Object類型數(shù)組在VB6.0中,如果聲明數(shù)組時(shí)不指定數(shù)據(jù)類型,或指定Variant類型,稱為變體數(shù)組,在VB.NET中,取代Variant的是Object類型。Object類型支持.NETFramework類層次結(jié)構(gòu)中的所有類,并為派生類提供低級(jí)別服務(wù),它是.NETFramework中所有類的最終基類。如果數(shù)組被聲明為Object類型,可以用其保存不同類型的數(shù)據(jù),該數(shù)組是對(duì)象數(shù)組。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,用戶還以自定義復(fù)雜數(shù)據(jù)類型——類,數(shù)組的數(shù)據(jù)類型也可是用戶自定義類的對(duì)象。例如,如果用戶自定義了表示人員的類Person,就可以用語(yǔ)句“DimarrP(10)AsPerson”創(chuàng)建對(duì)象數(shù)組arrP?!纠?-6】分析下列程序運(yùn)行結(jié)果,理解Object數(shù)組的使用。

SubMain()DimarrA(4)AsObject'聲明Object類型數(shù)組arrA(4)arrA(0)="asdf"'arrA(0)被賦值為字符串“asdf”arrA(1)=123'arrA(1)被賦值為整數(shù)123arrA(2)=45.6'arrA(2)被賦值為浮點(diǎn)數(shù)45.6arrA(3)=True'arrA(3)被賦值為布爾型數(shù)據(jù)TruearrA(4)=#3/2/2016#'arrA(4)被賦值為日期類型數(shù)據(jù)

Fori=0To4Console.Write(arrA(i))Console.Write("")Console.WriteLine(arrA(i).GetType)'輸出數(shù)組元素的數(shù)據(jù)類型NextConsole.Read()EndSub【例6-7】編寫一個(gè)應(yīng)用程序,界面如圖6-6所示。要求輸入幾個(gè)學(xué)生成績(jī)后,要將文本框中字符串拆分成數(shù)組,單擊“計(jì)算平均值”按鈕可以計(jì)算平均值,并顯示在下面的文本框中。按鈕的單擊事件代碼為:PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.ClickDimsumAsInteger=0DimScore()AsObjectScore=Split(TextBox1.Text,",")DimnAsInteger=Score.LengthFori=0Ton-1sum=sum+Score(i)NextTextBox2.Text=n&"個(gè)學(xué)生平均成績(jī)="&Int(sum/n*10+0.5)/10EndSub6.3.2System.Array類及其成員Array類是公共語(yǔ)言運(yùn)行庫(kù)中所有數(shù)組的基類。在VB.NET中,所有的數(shù)組都是從Array類繼承而來,數(shù)組被作為一個(gè)對(duì)象來處理,任何數(shù)組都可以訪問Array類的方法和屬性。數(shù)組中的一個(gè)元素就是Array中的一個(gè)值。Array的長(zhǎng)度是它可包含的元素總數(shù)。Array的秩是數(shù)組的維數(shù)。Array中某一維的下限是數(shù)組該維度的起始索引,多維數(shù)組的各個(gè)維度可以有不同的界限。1.System.Array類的常用屬性屬

性說

明IsFixedSize獲取指示Array是否具有固定大小的值。IsReadOnly獲取指示Array是否為只讀的值。Length獲取Array的所有維度中的元素總數(shù)。Rank獲取Array的秩(也就是維數(shù))。表6.1Array類的常用屬性及其說明方

法說

明BinarySearch使用二進(jìn)制搜索算法在一維的排序Array中搜索值。Clear將Array中的一系列元素設(shè)置為零、false或空引用(即:Nothing),具體操作時(shí)設(shè)定值取決于元素類型。Copy將一個(gè)Array的一部分復(fù)制到另一個(gè)Array中,并根據(jù)需要執(zhí)行強(qiáng)制類型轉(zhuǎn)換和裝箱。CopyTo將當(dāng)前一維Array的所有元素復(fù)制到指定的一維Array中(從指定的目標(biāo)Array索引開始)。GetLength獲取Array的指定維度中的元素?cái)?shù)。GetLowerBound獲取Array中指定維度的下限。GetUpperBound獲取Array的指定維度的上限。GetValue獲取當(dāng)前Array中指定元素的值。IndexOf返回一維Array或部分Array中某個(gè)值的第一個(gè)匹配項(xiàng)的索引LastIndexOf返回一維Array或部分Array中某個(gè)值的最后一個(gè)匹配項(xiàng)的索引。Reverse反轉(zhuǎn)一維Array或部分Array中元素的順序。Sort對(duì)一維數(shù)組各元素進(jìn)行升序排列SetValue將當(dāng)前Array中的指定元素設(shè)置為指定值。表6.2System.Array類的常用方法及其說明(1)復(fù)制數(shù)組元素方法Copy和CopyTo方法都用于進(jìn)行一維數(shù)組復(fù)制可以將源數(shù)組的全部或部分元素復(fù)制到目標(biāo)數(shù)組指定位置,具體格式為:格式一:源數(shù)組名.CopyTo(目標(biāo)數(shù)組名,目標(biāo)數(shù)組起始位)格式二:Array.Copy(源數(shù)組,源數(shù)組起始位,目標(biāo)數(shù)組,目標(biāo)數(shù)組起始位,長(zhǎng)度)(2)克隆數(shù)組源數(shù)組名.Clone():該方法可以將源數(shù)組完全復(fù)制,返回一個(gè)新的對(duì)象。例如:DimarrA()AsInteger={1,2,3,4,5}DimarrC()AsIntegerarrC=arrA.Clone‘

arrC(0)~arrC(4)分別為1,2,3,4,5(3)返回元素的下標(biāo)值A(chǔ)rray.IndexOf(數(shù)組,元素值):

返回第一個(gè)等于該元素值的元素的下標(biāo)值。Array.LastIndexOf(數(shù)組,元素值):返回最后一個(gè)等于該元素值的元素的下標(biāo)值。例如,在上例中復(fù)制得到數(shù)組arrB的7個(gè)元素,arrB(0)~arrB(6)分別為0、1、2、3、4、5,則

Array.IndexOf(arrB,3)

為3,Array.IndexOf(arrB,0)

為0。Array.LastIndexOf(數(shù)組,0)值為6。(4)將數(shù)組各元素排序Array.Sort(數(shù)組):對(duì)數(shù)組各元素進(jìn)行升序排列。例如:DimarrA()AsString={"M","O","R","S","K"}Array.Sort(arrA)'排序后,arrA(0)~arrA(3)分別是K、M、O、R、S。(5)反向排列各元素值A(chǔ)rray.Reverse(數(shù)組)

:將數(shù)組各元素按相反順序排列。例如:DimarrA()AsString={"M","O","R","S","K"}Array.Reserve(arrA)‘反轉(zhuǎn)后,arrA(0)~arrA(3)分別是K、S、R、O、M。(6)搜索數(shù)組元素Array.BinarySearch(數(shù)組,元素值)

:如果數(shù)組中沒有重復(fù)值,返回該元素的下標(biāo)值;如果數(shù)組有重復(fù)值且數(shù)組未排序,返回第一個(gè)與該元素值相等的元素下標(biāo)值,如果數(shù)組已排序,則返回最后一個(gè)與該元素值相等的元素下標(biāo)值。例如:DimarrA()AsString={"M","O","R","S","K","R"}MessageBox.Show(Array.BinarySearch(arrA,"R"))'顯示值為2Array.Sort(arrA)MessageBox.Show(Array.BinarySearch(arrA,"R"))'顯示值為4【例6-8】按照?qǐng)D6-7所示界面,創(chuàng)建一應(yīng)用程序,通過四個(gè)按鈕分別進(jìn)行一維數(shù)組、二維數(shù)組的聲明、初始化、數(shù)組中各元素的排序,以及數(shù)組的重新申明、重新初始化等操作。按照?qǐng)D6-7創(chuàng)建應(yīng)用程序界面,編寫各個(gè)按鈕的單擊事件代碼,其中,按鈕1、2、3是對(duì)一維數(shù)組的操作,按鈕4是創(chuàng)建二維數(shù)組,且在程序中進(jìn)行初始化。DimarrS1(3)AsStringPrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.ClickDimiAsIntegerFori=0To3arrS1(i)=InputBox("請(qǐng)輸入字符串初始化創(chuàng)建的一維數(shù)組",,"元素"&i)NextButton3.Enabled=TrueButton4.Enabled=TrueListBox1.Items.Clear()DimTempAsStringForEachTempInarrS1ListBox1.Items.Add(Temp)NextEndSubPrivateSubButton2_Click(senderAsObject,eAsEventArgs)HandlesButton2.ClickDimarrS2(,)AsString={{"VB.NET","程序設(shè)計(jì)"},{"實(shí)用","教程"}}Fori=0To1Forj=0To1ListBox2.Items.Clear()DimTempAsStringForEachTempInarrS2ListBox2.Items.Add(Temp)NextNextNextEndSubPrivateSubButton3_Click(senderAsObject,eAsEventArgs)HandlesButton3.ClickArray.Sort(arrS1)'對(duì)一維數(shù)組排序ListBox1.Items.Clear()DimTempAsStringForEachTempInarrS1ListBox1.Items.Add(Temp)NextEndSubPrivateSubButton4_Click(senderAsObject,eAsEventArgs)HandlesButton4.ClickReDimPreservearrS1(5)DimiAsIntegerFori=4To5arrS1(i)=InputBox("請(qǐng)輸入字符串,初始化一維數(shù)組!",,"元素"&i)NextListBox1.Items.Clear()DimTempAsStringForEachTempInarrS1ListBox1.Items.Add(Temp)NextEndSub6.4集合與控件數(shù)組6.4.1集合與數(shù)組數(shù)組從Array類繼承了許多的屬性和方法,使得數(shù)組復(fù)制、排序、搜索等操作都比較便利。同時(shí),數(shù)組元素在內(nèi)存中是連續(xù)存儲(chǔ)的,遍歷比較方便,也可以很方便的修改元素。但是使用數(shù)組元素時(shí),會(huì)受到數(shù)組下標(biāo)上界的限制,要更改數(shù)組的大小,必須使用

ReDim語(yǔ)句。而集合則不需要事先定義大小,可以根據(jù)需要自動(dòng)分配大小,可以隨意添加、刪除某個(gè)元素。

集合提供了一種更靈活的處理對(duì)象組的方法。集合是類,實(shí)例化后,才能向集合中添加元素。放入集合中的每個(gè)對(duì)象都有一個(gè)索引序號(hào)(從0開始的整數(shù)),利用該索引可以檢索和操作該對(duì)象。

聲明數(shù)組時(shí)要指定數(shù)據(jù)類型,數(shù)組只能保存聲明時(shí)所指定數(shù)據(jù)類型的數(shù)據(jù)(除非是Object類型),但一個(gè)集合中可以存儲(chǔ)不同類型的數(shù)據(jù)。所以,如果要處理的數(shù)據(jù)類型不同,數(shù)據(jù)項(xiàng)數(shù)經(jīng)常更改,或者無法預(yù)測(cè)所需的最大項(xiàng)數(shù),使用集合非常方便。

6.4.2創(chuàng)建集合1.集合的類型根據(jù)程序的不同用途,.NETFramework提供了許多常用的集合類型,這些類隸屬于不同名稱空間。主要包括用于System.Collections.Generic

、System.Collections.Concurrent

和System.Collections。System.Collections中的類不是將元素存儲(chǔ)為指定類型的對(duì)象,而是存儲(chǔ)為Object

類型的對(duì)象,所以,能夠很方便地存儲(chǔ)任何數(shù)據(jù)類型的元素。System.Collections名稱空間提供了以下幾個(gè)強(qiáng)大的類,包括ArrayList、

BitArray

、

Hashtable等,各個(gè)類及作用如下:

ArrayList:實(shí)現(xiàn)一個(gè)數(shù)組,其大小在添加元素時(shí)自動(dòng)增加大小,為一個(gè)可變大小的數(shù)組,可以在其列表中的任意位置增添或移除數(shù)據(jù),而且一個(gè)ArrayList對(duì)象可以存儲(chǔ)不同種類型的數(shù)據(jù)。

BitArray

:管理以位值存儲(chǔ)的布爾數(shù)組。Hashtable:實(shí)現(xiàn)由鍵組織的值的集合(KeyValue),排序是基于鍵的散列完成的(哈希函數(shù))。Queue:實(shí)現(xiàn)先進(jìn)先出的集合(排序方式)。Stack

:實(shí)現(xiàn)后進(jìn)先出的集合。SortedList:實(shí)現(xiàn)帶有相關(guān)鍵的值的集合,該值按鍵來排序,可以通過鍵或索引來訪問。2.創(chuàng)建與使用集合在VB.NET中,支持原VB的collection

集合,

聲明這種集合具體格式為:Dim集合名AsNewCollection()集合名只要符合變量名命名規(guī)則即可,根據(jù)集合訪問權(quán)限的不同,Dim可以換成Public、Static,例如:Dim?mycoll?As?New?Collection()就會(huì)創(chuàng)建一個(gè)名為mycoll的集合對(duì)象。創(chuàng)建集合后可以使用集合的屬性和方法進(jìn)行相應(yīng)操作,主要包括使用

Add方法添加元素,使用

Remove方法移除元素等。集合中的成員可以是同一種類型的數(shù)據(jù),也可以是不同類型的數(shù)據(jù)。建立了集合后,集合中的每個(gè)成員都有一個(gè)索引值,它相當(dāng)于數(shù)組中的下標(biāo),通常也稱為下標(biāo),集合元素的索引值是從1到集合的

Count

屬性值。可以通過索引使用集合元素,格式為:集合名.Item(索引)

【例6-9】分析下列代碼,熟悉集合的創(chuàng)建與使用方法。PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.Clic

DimiAsShortDimCollAAsNewCollection()Fori=1To10CollA.Add("集合元素"&i)NextiFori=1To10TextBox1.Text=TextBox1.Text&CollA(i)&vbCrLfNextEndSub

6.4.3ArrayList對(duì)象1.創(chuàng)建ArrayList對(duì)象創(chuàng)建ArrayList對(duì)象實(shí)例的方法與創(chuàng)建數(shù)組相似,格式為:格式一:Dim變量名As?New?ArrayList格式二:Dim變量名As?ArrayList:

變量名=NewArrayList例如:Dim?Arl?As?New?ArrayList該語(yǔ)句與下面兩條語(yǔ)句相同。DimArlAsArrayList:Arl=NewArrayList

2.ArrayList的常用屬性ArrayList的常用屬性包括以下幾個(gè):(1)Capacity:獲取或設(shè)置

ArrayList

可包含的元素?cái)?shù),即ArrayList的容量

,空集合容量為0,非空集合容量為4,8,16......,每次擴(kuò)大2倍的方式遞增。(2)Count:獲取

ArrayList

中實(shí)際包含的元素?cái)?shù)。(3)IsReadOnly:判斷

ArrayList

是否為只讀。(4)Item(索引):獲取或設(shè)置指定索引處的元素,索引是從零開始的整數(shù)。(5)IsFixedSize:判斷

ArrayList

是否具有固定大小。3.ArrayList的常用方法ArrayList的方法有很多,使用這些方法可以很方便地添加、刪除集合數(shù)據(jù)項(xiàng),復(fù)制集合、以及對(duì)集合進(jìn)行排序等。(1)add(對(duì)象):將對(duì)象添加到

ArrayList

的結(jié)尾處,隨著向ArrayList中添加元素,容量按需自動(dòng)增加。(2)Clear:從

ArrayList

中移除所有元素。。(3)Contains(object):如果數(shù)組列表含有該對(duì)象則返回true。(4)CopyTo(array):把一個(gè)數(shù)組列表拷貝到一個(gè)一維的數(shù)組array中去。(5)IndexOf(object):返回第一個(gè)元素的值。(6)Insert(index,object):在index指定的位置插入一個(gè)元素(7)Remove():從列表中刪除指定元素或指定位置的元素。(8)Sort:對(duì)列表進(jìn)行排序。(9)Reverse:將整個(gè)

ArrayList

中元素的順序反轉(zhuǎn)。(10)ToArray(數(shù)據(jù)類型):將

ArrayList

的元素復(fù)制到一個(gè)指定元素類型的新數(shù)組。(11)ToString:返回表示當(dāng)前對(duì)象的字符串?!纠?-10】分析下列程序代碼,熟悉ArrayList的屬性和方法。

SubMain()DimArlAsNewArrayList'必須用new實(shí)例化DimobjItemAsObjectConsole.WriteLine(Arl.Capacity)'顯示為0,新建數(shù)組列表對(duì)象初始容量為0Arl.Add("Visual")'添加一個(gè)-字符串Console.WriteLine(Arl.IndexOf("Visual"))'新添加的字符串索引為0Console.WriteLine(Arl.Capacity)'顯示為4,只要添加了元素,數(shù)組列表對(duì)象最小容量為4Arl.Add("Basic")'添加一個(gè)字符串,索引為1Arl.Add("Net")'添加一個(gè)字符串,索引為2Arl.Insert(2,".")'在索引2處插入一個(gè)字符串,將“.”插入到Net之前

ForiAsInteger=1To5'利用循環(huán)在集合末尾添加5個(gè)整數(shù),索引為4~8Arl.Add(i)Next

Console.WriteLine(Arl.Capacity)'數(shù)值為16Console.WriteLine(Arl.Count)'數(shù)值為9Console.WriteLine(Arl.Contains("Net"))'顯示為TrueArl.Remove(3)'刪除數(shù)值為3的元素,數(shù)值3的索引為6,后序數(shù)據(jù)前移Console.WriteLine(Arl(6))'數(shù)值為4Arl.RemoveAt(6)'刪除索引為6的元素,即刪除數(shù)值4ForEachobjItemInArlConsole.WriteLine(objItem.ToString)'以字符串形式顯示集合的所有元素NextConsole.Read()EndSub

6.4.4控件數(shù)組的創(chuàng)建方法控件數(shù)組是一組共享同一名稱和類型的控件,在VB6.0中既允許在設(shè)計(jì)階段可視地創(chuàng)建和編輯控件數(shù)組,又可以在程序中定義并生成控件對(duì)象數(shù)組,它們也共享同一事件過程。但在VB.NET中不是按照在VB6.0中同樣的方法創(chuàng)建控件數(shù)組,而是使用控件集合。所謂控件集合是指包含在一個(gè)容器中的所有控件的總和,不僅僅是同類型的控件。能夠創(chuàng)建控件集合的容器有:Form、Panel、GropBox等。程序運(yùn)行時(shí),可以通過訪問容器的Control屬性來得到該容器中的所有控件。1.利用Form容器控件創(chuàng)建控件數(shù)組在VB.NET中,一個(gè)窗體中的所有控件自動(dòng)構(gòu)成一個(gè)控件集合(控件數(shù)組)。所以,在訪問這些控件時(shí),有兩種方式,一是通過控件名稱直接訪問;二是通過Controls.Item(n)屬性按下標(biāo)訪問。例如,建立圖6-8所示的窗體應(yīng)用程序后,在Form1上先添加的七個(gè)標(biāo)簽控件label1~label7,再添加七個(gè)文本框控件textbox1~textbox7,最后添加一個(gè)按鈕控件button1。這些添加到窗體上的控件自動(dòng)構(gòu)成了一個(gè)控件集合。默認(rèn)情況下,集合中控件的下標(biāo)順序是與設(shè)計(jì)窗體時(shí)加入控件的順序相反的,即Me.Controls.Item(0)代表的是按鈕bton1,Me.Controls.Item(1)代表的是textbox7,以此類推,Me.Controls.Item(14)代表的是label1。可以采用以下方法修改下標(biāo)的順序。(1)在【解決方案資源管理器】視圖中,單擊Form1.vb左側(cè)的三角按鈕,在展開的列表中再單擊Form1左側(cè)的三角按鈕,在其展開項(xiàng)中找到【componentsAsIcontainer】項(xiàng),(2)雙擊【componentsAsIcontainer】項(xiàng),將打開文件“”,在代碼編輯窗中點(diǎn)擊Windows窗體設(shè)計(jì)器生成的代碼左側(cè)的“+”號(hào),將所有代碼展開,就可以找到下列代碼:Me.Controls.Add(Me.Button1)Me.Controls.Add(Me.TextBox7)Me.Controls.Add(Me.TextBox6)......Me.Controls.Add(Me.Label1)這個(gè)代碼順序就是控件數(shù)組的下標(biāo)順序。(3)修改這個(gè)順序就可以改變控件數(shù)組中每個(gè)元素的下標(biāo)。2.在程序中動(dòng)態(tài)添加控件數(shù)組前面定義的控件數(shù)組是在設(shè)計(jì)階段完成的,它要求,控件數(shù)組中的控件數(shù)量必須已知,也叫靜態(tài)控件數(shù)組;但很多時(shí)候要求,控件數(shù)組中的控件數(shù)量要用程序的某些運(yùn)行情況來確定,這就要求,控件數(shù)組中的控件要能實(shí)現(xiàn)動(dòng)態(tài)添加。(1)利用

ArrayList

對(duì)象創(chuàng)建控件數(shù)組下面來建立一個(gè)VB.NET的窗體應(yīng)用程序,在Form上添加兩個(gè)按鈕,其中,Button1用來添加動(dòng)態(tài)控件數(shù)組;Button2用來修改數(shù)組中每個(gè)控件的屬性。

在代碼編輯窗口中輸入如下代碼:Dim

List

As

New

ArrayList

PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.ClickDimiAsIntegerFori=0To4'利用循環(huán)語(yǔ)句動(dòng)態(tài)加入控件數(shù)組。

DimFirstTextBoxAsNewTextBox'定義文本框?qū)ο?/p>

Me.Controls.Add(FirstTextBox)'將一個(gè)文本框控件加入到Form上

Arl.Add(FirstTextBox)'將文本框控件加入到例表集合中

Arl.Item(i).top=i*Arl.Item(i).height+20'修改新加入控件在Form上的位置Arl.Item(i).left=100FirstTextBox.TabIndex=i'修改新加入控件的TabIndex值

Arl.Item(i).text="TextBox"&i.ToString'修改默認(rèn)文本。

NextEndSubPrivateSubButton2_Click(senderAsObject,eAsEventArgs)HandlesButton2.ClickDimiAsIntegerFori=0To4Arl.Item(i).text="第"&i.ToString&"個(gè)元素"NextEndSub(2)創(chuàng)建指定類型控件數(shù)組VB.NET支持利用程序創(chuàng)建指定類型控件的數(shù)組,如label、TextBox、RadioButton等具體控件類型,創(chuàng)建格式為:Dim控件數(shù)組名()As控件類型例如:DimlblA(5)AsLabel'創(chuàng)建包含6個(gè)元素的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論