You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:31:04