当前位置:编程学习 > VB >>

关于数组的问题!有点想不通啊~~

小弟第一次在这发帖,遇到一个问题,请教各位了!!!

题目请看http://tp3.aiyuanyuan.com.cn/upload/pics/8a6830f74cff8da170bbf600f508fa42.JPG

这是我做的代码
Dim a(50) As Long

Private Sub Command1_Click()
    a(0) = 1
    a(1) = 1
    For i = 2 To CInt(Text1.Text)
        a(i) = a(i - 1) + a(i - 2) + 1
        Debug.Print a(i)
    Next i
    Text2.Text = a(i)
End Sub

Private Sub Command2_Click()
    Open "out5.txt" For Output As #1
    Print #1, Text2.Text
    Close #1
End Sub


这是答案
Dim a(50) As Long

Private Sub Command1_Click()
    a(1) = 1
    a(2) = 1
    For i = 3 To CInt(Text1.Text)
        a(i) = a(i - 1) + a(i - 2) + 1
    Next i
    Text2.Text = a(i - 1)
End Sub

Private Sub Command2_Click()
    Open "out5.txt" For Output As #1
    Print #1, Text2.Text
    Close #1
End Sub

为什么我做的计算出来text2显示是0呢?立即里面也不是0啊!
还有,vb数组不是默认从0开始么? --------------------编程问答-------------------- 正因为数组默认从0开始,那么当i到达终值CInt(Text1.Text)后又一次进入循环变成了CInt(Text1.Text)+1,判断不符合循环要求后退出FOR后执行你的Text2.Text = a(i)语句;但这个时候的a(i)已经不是你循环里的a(i),而是a(i+1)了;
LONG型数组元素a(i+1)没赋值,当然默认是0了,呵呵

修改代码:

Private Sub Command1_Click()
    a(0) = 1
    a(1) = 1
    For i = 2 To CInt(Text1.Text)
        a(i) = a(i - 1) + a(i - 2) + 1
        Debug.Print i, a(i)
    Next
    Text2.Text = a(i - 1)
End Sub
--------------------编程问答-------------------- vb数组是不是默认从0开始,看设置,在代码开头加一句:
option base 0 --------------------编程问答-------------------- 或者你把
Text2.Text = a(i - 1)
改成
Text2.Text = a(CInt(Text1.Text))
比较直观一点 --------------------编程问答-------------------- 感谢toury,zzyong00,ayalicer三位的回答,我已经明白了~ --------------------编程问答-------------------- Text2.Text = a(i)
改成
Text2.Text = a(i-1)
就可以了。

另外,VB的数组默认就是从0开始的
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,