2016-11-14 38 views
-1

好吧,我正在製作計算器。您知道如何在計算器中,按下加號,減號等按鈕後,您可以輸入一個新號碼。我正在試圖用數組來做到這一點。每次用戶按下「Enter」按鈕時,文本框中的數字將被添加到數組中。該數組然後被求和得到數組中的所有數字。根據數量有多少,更改數組的大小

因爲他們希望用戶可以輸入儘可能多的數字,我想我必須使用動態數組。

有沒有辦法縮小數組,使長度是數組中的項目數?

這裏是我有我的數組聲明:

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個項目,但這會使輸出顯示錯誤的信息。

所以我的問題是如何使它所以數組的長度設置爲在其內部元件的數量。

預先感謝您。

+1

'REDIM PRESERVE' – SSS

+2

我建議你使用List(雙精度型),而不要關心這類內存微操作。 –

+0

Obvios XY問題。主要問題是 - >需要在動態收集,選擇解決方案 - >是數組,問題 - >如何改變數組的大小。關於主要問題的真正答案是@ZevSpitz已經指出的「List(Of Double)」。 – Fabio

回答

-1
Redim Preserve inputNumbers(inputNumbers.GetUpperBound(0) + 1) 'Increase the capacity of the array by one 
inputNumbers(inputNumbers.GetUpperBound(0)) = CDbl(inputTxt.Text) 
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答案);你是ReDim將你的數組轉換爲數組的當前大小。

此外,你應該使用Redim Preserve所以你不必舊數組的內容複製到新的數組。