5.3动态数组及声明 1. 动态数组的建立与声明
3 Y$ ^& Q+ S* Q 建立动态数组的方法是:利用Dim、Private、Public语句声明括号内为空的数组,然后在过程中用ReDim语句指明该数组的大小。语法是:
H8 K" @( o- f8 ?/ { C ReDim 数组名(下标1[,下标2…]) [As 类型]+ ^7 m( I4 P- c5 q7 `9 R2 i
其中下标可以是常量,也可以是有了确定值的变量,类型可以省略,若不省略,必须与Dim中的声明语句保持一致。
% N) X+ H! y* t& y0 g- T 例: Dim D() As Single
0 T* |9 P5 D- Z0 F Sub Form_Load()
: T+ Q/ G8 \) I W( Q2 b ……
0 p) d6 A1 F+ [" q) Y ReDim D(4,6): m+ B3 { R1 ^* g; o
……
4 g" f4 Z7 H' V8 d End Sub
( S, i) b7 H% V" ^" O, B7 Q3 m( v! [; D 2.注意事项- {- |6 F- g+ @" I& l
(1)在动态数组ReDim语句中的下标可以是常量,也可以是有了确定值的变量。
" R$ j& V) l8 @6 _9 e3 j, ] (2)在过程中可以多次使用ReDim来改变数组的大小,也可改变数组的维数。
+ O% i2 _3 w& R" b' H# v0 i% _9 O (3)每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数来保留数组中的数据,但使用Preserve只能改变最后一维的大小,前面几维大小不能改变。6 [- ^3 n, ^6 j6 H# A
1. 给数组元素赋初值
* v8 D" Z% d' n5 b3 k& j5 f2 k (1) 利用循环结构
( }2 I" i) N6 U0 y7 B! j V 例:Dim iA(1 To 10) As Integer# R. _; Z& R* D: N
For i=1 To 10) g/ z- x8 U* x0 t0 _
A(i)=0
0 e' z3 O% ]9 S* O/ } Next i1 C" A9 F- v2 r" k& i
(2) 利用Array函数- g0 L, _/ G$ W X7 p# h7 q( i- F
例:Dim a As Variant, b As Variant, i%
+ q+ u W6 o& G; a6 m K a = Array (1,2,3,4,5)7 G% h6 [: y. @* Y! w
b = Array ("abc","def","67")
% G) G, e9 i) a For i=0 To Ubound (a)
% L& | O% e: h* ]4 r0 ~ Picture1.print a(i);"";7 M8 p8 r$ o8 ]' x+ D2 E
Next i
% s. ~8 p9 Y$ S l$ \, ]5 E For i=0 To Ubound (b)
# g7 o9 m. k/ t1 Q) C4 n Picture1.print b(i);"";; e" F; [* I5 `& J
Next i
6 `. m. f$ I9 k$ M& r9 l7 {% ?5 h 2.数组的输入3 W0 L( p9 W' R
(1) 通过InputBox函数输入适合输入少量数据。+ ?# `' R+ T$ E6 `( u
例:Dim sB(3,4) As singer; r9 c5 v! s2 h" u
For i=0 To 3
+ K) ]3 Q9 Z. Z. P For j=0 To 4
6 x. n/ h. E0 `( T# s6 X SB(i,j) =InputBox("输入" & i & j & "的值")
& b3 `3 k, X$ Q* s6 K- G6 M Next j
# |4 ]. ]1 ?" Z, h4 ]! u( A$ I Next i
1 ^/ L2 Y& c& l$ h (2) 通过文本框控件输入% r W- \9 K0 ?% C3 V N6 g5 b7 J, h
对大批量的数据输入,采用文本框和函数split()\join()进行处理,效率更高。+ E: O! s% c! Z3 f, D, V$ h4 B2 e
3.数组的赋值
2 i- Z3 g( T, B; b 在VB6.0中可以直接将一个数组的值赋值给另一个数组:
, F0 v# o% h- ]# Q Dim a(3) as integer, b() as integer& y1 Y8 t v7 _: x% @# z7 b
A(0)=2: A(1)=5: A(2)=-2: A(3)=29 w2 `4 N2 z: C: p/ ?- W- M5 y
b=a
8 o- m3 Q. w0 Q1 @ l5 {. ?; ]7 r 在早期的VB中,这需要用循环语句才可以实现:
$ E8 T2 G& S3 n4 n ReDim b(UBound(a))6 _" c2 y( j( V, \7 D3 I8 ~( }
For I=0 to UBound(a)
" I6 @8 l4 I4 N D4 e b(I)=a(I)
2 @8 P1 b' h$ t. V. f Next i
8 E4 |. A; B# Q' l: t/ M- | 注意:(1)赋值号两边的数据类型必须一致;
. K( [5 [; N Z) C( H p$ f (2)如果赋值号左边的是一个动态数组,则赋值时系统自动将动态数组ReDim成右边相同大小的数组;* p3 ^8 L3 k9 g! Y
(3)如果赋值号左边的是一个大小固定的数组,则数组赋值出错。
! j2 J0 Z" D! ~0 e/ U 4.数组的输出$ P! X) D$ m% E
用For……Next循环语句输出。
2 s: p6 \8 e$ v5 u/ O( q) s 5.求数组中最大元素和所在下标及各元素之和, B- {; ^* R% R3 A' r3 a
求数组中最大元素及下标,一般假设第一个元素及下标为最大,然后将该数与数组中的其他元素逐一比较,若有比其大的就替换,同时替换下标。
: g% e; T. ?& s& i( `# g8 W. | 6.交换数组中各元素$ p( r# e/ B$ X/ @3 I) V1 T- X
交换的要求是将数组第一个元素与最后一个交换,第二个与倒数第二个交换,依次类推。 |