VB.NET控制台程序:将两个一维数组合并为二维数组时输出布尔值异常
问题分析与修正
核心问题
你看到的True/False是因为输出语句用了比较运算符=,而非直接输出数组元素。另外二维数组的赋值逻辑也完全错误,导致数据存储混乱。
代码中的具体错误
- 二维数组赋值逻辑错误:内层循环中,你先把
detailtab(i,j)赋值为cde(i),紧接着又覆盖成sly(i),最终每个detailtab(i,j)的值都是sly(i),完全没利用j的索引,也没把cde和sly的数据分别存入二维数组的不同维度。 - 输出语句错误:
Console.WriteLine(detailtab(i,j) = cde(i))里的=是比较操作,会判断两个值是否相等,返回布尔值(相等则True,不等则False),这就是输出结果全是布尔值的原因。 - 字符串分割逻辑缺陷:遍历字符找
∆时,若一行中有多个∆,会覆盖pos1为最后一个的位置,应该找到第一个∆就退出循环,避免错误。 - 数组索引风险:VB.NET默认数组索引从0开始,代码直接从1循环,若未设置
Option Base 1会引发索引越界,建议明确数组范围或调整循环起点。
修正后的代码
Sub detailTable() ' 明确数组维度,detailtab第一维存Code,第二维存Salary Dim detailtab(1, 5) As String ' 索引0:Code, 1:Salary;对应5条数据 Dim cde(5) As String Dim sly(5) As Integer Dim pos1 As Integer For i = 1 To 5 Dim Length As Integer = Len(filearray(i)) pos1 = 0 ' 每次循环重置位置 For k = 1 To Length If Mid(filearray(i), k, 1) = "∆" Then pos1 = k Exit For ' 找到第一个∆就退出循环 End If Next If pos1 > 0 Then ' 确保找到分隔符 cde(i) = Left(filearray(i), pos1 - 1) ' 转换为Integer时处理异常,避免格式错误 Integer.TryParse(Right(filearray(i), Length - pos1), sly(i)) End If Next Console.WriteLine("Code | Salary") Console.WriteLine("----------------") ' 正确赋值二维数组:第一维区分Code/Salary,第二维对应每条数据 For j = 1 To 5 detailtab(0, j) = cde(j) detailtab(1, j) = sly(j).ToString() Next ' 正确输出二维数组内容 For j = 1 To 5 Console.WriteLine($"{detailtab(0, j)} | {detailtab(1, j)}") Next End Sub
修正说明
- 调整二维数组逻辑:用第一维区分
Code和Salary,第二维对应每条数据,避免覆盖赋值。 - 修复输出语句:直接输出数组元素,用字符串插值格式化输出。
- 优化分割逻辑:找到第一个
∆就退出循环,加入pos1判断避免空值错误,用Integer.TryParse处理类型转换异常。 - 明确数组索引:避免默认索引带来的越界问题,代码逻辑更清晰。
内容的提问来源于stack exchange,提问作者Saifali
相关产品推荐
相关产品推荐

