2012-09-25 133 views
4

我尝试为GA生成总体时遇到了错误。我使用了一个2D数组来帮助生成一个人口。首先,用户将输入人口大小,然后输入染色体长度,进入用户表单。VBA宏运行时错误'9':下标超出范围 - 数组

我的变量:

Dim Generation As Integer 
Dim Chromolength As Integer 
Dim varchromolength As Integer 
Dim Poparr() As Integer 

然后我从窗体获取值:

For i = 1 To PopSize   
    For j = 1 To Chromolength  
    If Rnd < 0.5 Then   
     Poparr(i, j) = 0 'assign o to gene 
    Else 
     Poparr(i, j) = 1 'assign 1 to gene  
    End If 
    Next j 
Next i 

我很抱歉,我:

PopSize = PopulationSize.value 
aVariables = AOV.value   'assign userform value entered to this variable 
varchromolength = Chromolengthentered.value 'assign userform value entered to this variable 
Chromolength = varchromolength * aVariables 'Chromosome length equals the length of  each varaible chromosome combined 

然后在错误ocurs编码VBA相当新颖。任何帮助这个错误将不胜感激。

回答

5

根据您的代码,您从不指定数组的维数。为此,在设置PopSizeChromoLength的值之后,在for循环之前插入此行。

Redim Poparr(1 to PopSize, 1 to ChromoLength) 

不必要的细节:你可以只运行Redim Poparr(PopSize, ChromoLength)但这样会导致那名0 to Popsize等阵列...除非你添加Option Base 1到您的模块的顶部。数组的默认基数为0.我认为最好明确指出数组的下限和上限,因为默认值可以是0或1,具体取决于上下文。

相关问题