VB.NET程序仅输出'int 32'排查:生成0-50数组并列表输出需求
问题排查与修正方案
我来帮你拆解下代码里的问题,以及怎么修复它:
1. 循环逻辑完全错误,导致循环根本没执行
你的Do Until条件写反了:
- VB.NET中,
Do Until [条件]的逻辑是当条件为真时停止循环 - 初始化时
Index = 0,而Integer数组默认所有元素都是0,所以Numbers(Index) <=50一开始就是True,循环直接跳过,数组里的元素除了默认的0,其他都没被赋值。
就算循环能执行,你的循环体逻辑也有问题:先给Index +=1再赋值,会跳过Numbers(0)的赋值,而且很快会触发数组越界(因为数组下标最大是50,当Index到50时,Index +=1会变成51,访问Numbers(51)就会报错)。
2. 错误地将整个数组对象添加到ListBox
你用lstnumbers.Items.Add(Numbers),实际上是把整个数组对象添加到列表项里,而ListBox会调用对象的ToString()方法显示内容。对于数组来说,ToString()返回的是它的类型名称(也就是你看到的Int32[]),而不是数组里的元素。
修正后的代码
下面是修复好的版本,能正确生成0-50的数组并逐个添加到ListBox:
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' 定义长度为51的数组(下标0到50,对应数值0-50) Dim Numbers(50) As Integer Dim Index As Integer = 0 ' 用Do While循环给数组赋值,从0到50 Do While Index <= 50 Numbers(Index) = Index Index += 1 Loop ' 遍历数组,把每个元素添加到ListBox For Each num As Integer In Numbers lstnumbers.Items.Add(num.ToString()) Next End Sub End Class
额外优化建议
你其实可以不用提前定义数组,直接用循环生成数值并添加到ListBox,更简洁:
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load For i As Integer = 0 To 50 lstnumbers.Items.Add(i.ToString()) Next End Sub End Class
这样直接跳过数组的定义,一步到位完成需求,代码更易读也更少出错。
内容的提问来源于stack exchange,提问作者George Hales
相关产品推荐
相关产品推荐

