根据其中的项目数量更改数组的大小

时间:2016-11-14 05:12:48

标签: arrays vb.net

好的,我正在制作一个计算器。你知道如何在计算器中点击加号,减号等按钮后,你可以输入一个新的数字。我试图用数组做这个。每次用户按下"输入"按钮,文本框中的数字将添加到数组中。然后将数组求和,得到数组中所有数字的总和。

由于用户可以输入任意数量的数字,我认为我必须使用动态数组。

有没有办法缩小数组,使长度是数组中的项数?

这是我如何声明我的数组:

Dim inputNumbers() As Double = New Double() {}

以下是我试图调整大小的方法。我试图计算数组中有多少项(保存在intItems变量中。然后我尝试使用intItems作为数组元素的数量重新声明数组。

 Dim intItems As Integer
    intItems = UBound(inputNumbers)
    ReDim inputNumbers(intItems)

    For i As Integer = 0 To inputNumbers.Length - 1
        inputNumbers(i) = CDbl(inputTxt.Text)
    Next i

这是我输入按钮的代码。由于会有一个数字,当按下此按钮时,数组应该以1个项目开头。所以它应该是inputNumbers(0)意味着它有1个项目。

该程序将当前输出数组的总和为0。运行调试器时,它跳过for循环,因为当它到达它时,for循环从For i as Integer = 0 to 0开始,所以它不会运行。

所以现在,我不知道该怎么做。我试着让数组在开始时保持999项,但这会使输出显示错误的信息。

所以我的问题是如何制作它,以便将数组长度设置为其中的元素数。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

您必须使用管理其自身大小的List(Of Double)来代替数组,而不必管理数组的大小:

Dim numbers As New List(Of Double)

然后,当按下 ENTER 时:

numbers.Add(inputText.Text) 'you may need a CDbl here

不相关,但无论您是使用数组还是列表,当您想要计算总和时,您可以使用LINQ:

Dim sum = numbers.Sum

如果由于某种原因必须使用数组,请注意您的代码永远不会增加数组的大小(请参阅this answer);你将你的数组ReDim设置为数组的当前大小。

此外,您应该使用Redim Preserve,这样您就不必将旧数组的内容复制到新数组中。

答案 1 :(得分:-1)

Redim Preserve inputNumbers(inputNumbers.GetUpperBound(0) + 1) 'Increase the capacity of the array by one
inputNumbers(inputNumbers.GetUpperBound(0)) = CDbl(inputTxt.Text)