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错误,说明可能我这种用法不对头,这是嘛回事呀)
展开
 我来答
满以柳J7
2013-10-13 · TA获得超过539个赞
知道小有建树答主
回答量:545
采纳率:66%
帮助的人:553万
展开全部
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)
艾迪康乐园
2013-10-13 · TA获得超过491个赞
知道小有建树答主
回答量:493
采纳率:0%
帮助的人:659万
展开全部
你的其他代码是怎么操作的?
至少在这里,你没有给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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szqaly
2013-10-13 · TA获得超过1745个赞
知道大有可为答主
回答量:2107
采纳率:77%
帮助的人:1536万
展开全部
也可以。你确信Result 里有内容吗,popsize大于0吗。传递数组参数没这么用过,Result()不用括号。
这句 (Dim min_index As Integer '每代最小适应值索引Dim sum As Single '适应度累加值) 在电脑上是不是也连成一行的,把它分开。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syx54
2013-10-13 · TA获得超过7379个赞
知道大有可为答主
回答量:6567
采纳率:83%
帮助的人:2760万
展开全部
你是问,为什么这个函数没有返回值?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式