VB定义的全局变量能不能用在函数里
比如我在通用声明里定义了如下变量DimmaxfitnessAsSingle'每代最大适应值DimminfitnessAsSingle'每代最小适应值Dimaverfitn...
比如我在通用声明里定义了如下变量
Dim maxfitness As Single '每代最大适应值
Dim minfitness As Single '每代最小适应值
Dim averfitness As Single '每代适应值平均值
Dim max_index As Integer '每代最大适应值索引
Dim min_index As Integer '每代最小适应值索引Dim sum As Single '适应度累加值
然后写了一个函数:
Private Function calculatefitnessvalue(Result() As Double, popsize As Integer)
sum = 0
maxfitness = 0
minfitness = Result(1)
For i = 1 To popsize
sum = sum + Result(i)
If maxfitness < Result(i) Then
maxfitness = Result(i)
max_index = i
End If
If minfitness > Result(i) Then
minfitness = Result(i)
min_index = i
End If
Next
averfitness = sum / popsize
End Function
这个函数没有返回值,我想引用它之后,调用已经计算好的maxfitness,sum ,min_index 等全局变量值,在C语言里这样是可以的,在VB里能不能也能达到我的目的,请教高手,表示感谢!
接下来调用那个函数
Private Sub Command1_Click(Index As Integer)
Call calculatefitnessvalue(Result(), popsize) '调计算适应度函数
q(1) = Result(1) / sum(此处出现sum等于0错误,说明可能我这种用法不对头,这是嘛回事呀) 展开
Dim maxfitness As Single '每代最大适应值
Dim minfitness As Single '每代最小适应值
Dim averfitness As Single '每代适应值平均值
Dim max_index As Integer '每代最大适应值索引
Dim min_index As Integer '每代最小适应值索引Dim sum As Single '适应度累加值
然后写了一个函数:
Private Function calculatefitnessvalue(Result() As Double, popsize As Integer)
sum = 0
maxfitness = 0
minfitness = Result(1)
For i = 1 To popsize
sum = sum + Result(i)
If maxfitness < Result(i) Then
maxfitness = Result(i)
max_index = i
End If
If minfitness > Result(i) Then
minfitness = Result(i)
min_index = i
End If
Next
averfitness = sum / popsize
End Function
这个函数没有返回值,我想引用它之后,调用已经计算好的maxfitness,sum ,min_index 等全局变量值,在C语言里这样是可以的,在VB里能不能也能达到我的目的,请教高手,表示感谢!
接下来调用那个函数
Private Sub Command1_Click(Index As Integer)
Call calculatefitnessvalue(Result(), popsize) '调计算适应度函数
q(1) = Result(1) / sum(此处出现sum等于0错误,说明可能我这种用法不对头,这是嘛回事呀) 展开
4个回答
展开全部
VB中变量的声明可以放在模块、窗体及各过程中
1、模块中定义的变量一般用 Public 声明,这样可以在应用程序中任何地方调用
Public myAppFileName as String
可以在本应用程序的任何窗体、过程中使用
2、在窗体通用中声明的变量只能在本窗体中使用
Private frmFileName as String
因为变量只是在窗体创建时创建,所以在该窗体中的任何过程及函数中使用
你上面说的情况,应该使用本窗体中声明变量就可以了。
3、过程(函数)体中声明的变量
Dim fileName as String
生命历程仅限于本过程(函数)
简单看你的函数,有下面建议:
1、函数体中的变量最好要声明,如
dim sum as double
2、函数调用一般格式:
dim x as double
x=calculatefitnessvalue(x,y)
1、模块中定义的变量一般用 Public 声明,这样可以在应用程序中任何地方调用
Public myAppFileName as String
可以在本应用程序的任何窗体、过程中使用
2、在窗体通用中声明的变量只能在本窗体中使用
Private frmFileName as String
因为变量只是在窗体创建时创建,所以在该窗体中的任何过程及函数中使用
你上面说的情况,应该使用本窗体中声明变量就可以了。
3、过程(函数)体中声明的变量
Dim fileName as String
生命历程仅限于本过程(函数)
简单看你的函数,有下面建议:
1、函数体中的变量最好要声明,如
dim sum as double
2、函数调用一般格式:
dim x as double
x=calculatefitnessvalue(x,y)
展开全部
你的其他代码是怎么操作的?
至少在这里,你没有给calculatefitnessvalue函数传递适当的参数。
Result() 和popsize都必须有适当的数据。否则就无法返回相应的Result(1)和 sum。
我进行如下的测试,运行正常。建议你认真检查其他代码,特变是与参数传递有关的代码。
Option Explicit
Dim maxfitness As Single '每代最大适应值
Dim minfitness As Single '每代最小适应值
Dim averfitness As Single '每代适应值平均值
Dim max_index As Integer '每代最大适应值索引
Dim min_index As Integer '每代最小适应值索引
Dim sum As Single '适应度累加值
Private Function calculatefitnessvalue(Result() As Double, popsize As Integer)
Dim i As Integer
sum = 0
maxfitness = 0
minfitness = Result(1)
For i = 1 To popsize
sum = sum + Result(i)
If maxfitness < Result(i) Then
maxfitness = Result(i)
max_index = i
End If
If minfitness > Result(i) Then
minfitness = Result(i)
min_index = i
End If
Next
averfitness = sum / popsize
End Function
Private Sub Command1_Click(Index As Integer)
Dim s As String
Dim i As Integer
Dim Result() As Double, q() As Double
Dim var As Variant
Dim popsize As Integer
s = "1 2 3 4 5 6 7"
var = Split(s, " ")
popsize = UBound(var)
ReDim Result(popsize)
ReDim q(popsize)
For i = 0 To popsize
Result(i) = var(i)
Next
Call calculatefitnessvalue(Result(), popsize)
q(1) = Result(1) / sum
End Sub
至少在这里,你没有给calculatefitnessvalue函数传递适当的参数。
Result() 和popsize都必须有适当的数据。否则就无法返回相应的Result(1)和 sum。
我进行如下的测试,运行正常。建议你认真检查其他代码,特变是与参数传递有关的代码。
Option Explicit
Dim maxfitness As Single '每代最大适应值
Dim minfitness As Single '每代最小适应值
Dim averfitness As Single '每代适应值平均值
Dim max_index As Integer '每代最大适应值索引
Dim min_index As Integer '每代最小适应值索引
Dim sum As Single '适应度累加值
Private Function calculatefitnessvalue(Result() As Double, popsize As Integer)
Dim i As Integer
sum = 0
maxfitness = 0
minfitness = Result(1)
For i = 1 To popsize
sum = sum + Result(i)
If maxfitness < Result(i) Then
maxfitness = Result(i)
max_index = i
End If
If minfitness > Result(i) Then
minfitness = Result(i)
min_index = i
End If
Next
averfitness = sum / popsize
End Function
Private Sub Command1_Click(Index As Integer)
Dim s As String
Dim i As Integer
Dim Result() As Double, q() As Double
Dim var As Variant
Dim popsize As Integer
s = "1 2 3 4 5 6 7"
var = Split(s, " ")
popsize = UBound(var)
ReDim Result(popsize)
ReDim q(popsize)
For i = 0 To popsize
Result(i) = var(i)
Next
Call calculatefitnessvalue(Result(), popsize)
q(1) = Result(1) / sum
End Sub
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
也可以。你确信Result 里有内容吗,popsize大于0吗。传递数组参数没这么用过,Result()不用括号。
这句 (Dim min_index As Integer '每代最小适应值索引Dim sum As Single '适应度累加值) 在电脑上是不是也连成一行的,把它分开。
这句 (Dim min_index As Integer '每代最小适应值索引Dim sum As Single '适应度累加值) 在电脑上是不是也连成一行的,把它分开。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是问,为什么这个函数没有返回值?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询