2016-11-14 7 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 

これは、コードIでありますこのボタンが押されたときには配列内に1つの項目があるので、その中に1つの項目があることを意味するinputNumbers(0)

このプログラムデバッガを実行すると、forループをスキップします。なぜなら、forループはFor i as Integer = 0 to 0から始まり、実行されないからです。

今、私は何をすべきか分かりません。私は配列を最初に999個のアイテムを保持するようにしようとしましたが、出力が間違った情報を表示します。

私の質問は、配列の長さがその内部の要素の数になるようにする方法です。

ありがとうございます。 を入力したときに押された後

Dim numbers As New List(Of Double) 

、:代わりに、あなたは、配列のサイズを管理する必要が配列の

+1

'REDIM PRESERVE' – SSS

+2

私は' List(Of Double) 'を使うことをお勧めします。この種のメモリ管理については心配しません。 –

+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)を、使用することができます:

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

無関係が、あなたは私たちをしているかどうかあなたは合計を計算したい場合、配列やリストをINGの、あなたは、LINQを使用することができます。あなたには、いくつかの理由のために、配列を使用する必要がある場合

Dim sum = numbers.Sum 

は、あなたのコードは決してのサイズを大きくされていないことに注意してくださいアレイ(this回答を参照)。あなたはReDimの配列を配列の現在のサイズに合わせています。

また、古いアレイの内容を新しいアレイにコピーする必要がないように、Redim Preserveを使用する必要があります。

関連する問題