2016-11-14 4 views
-1

Хорошо, поэтому я делаю калькулятор. Вы знаете, как в калькуляторе, после нажатия кнопок «плюс», «минус» и т. Д., Вы можете ввести новый номер. Я пытаюсь сделать это с помощью массива. Каждый раз, когда пользователь нажимает кнопку «Ввод», номер в текстовом поле будет добавлен в массив. Затем массив будет суммирован, чтобы иметь общее количество всех чисел в массиве.Изменить размер массива в зависимости от количества элементов в нем

Поскольку пользователь может ввести столько чисел, сколько захочет, я предполагаю, что мне нужно использовать динамический массив.

Есть ли способ уменьшить размер массива так, чтобы длина была числом элементов в массиве?

Вот как я мой массив заявил:

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 пункта в нем при нажатии этой кнопки, поэтому он должен быть введенным числом (0), что означает, что в нем 1 элемент.

Эта программа будет выводить сумму массива в 0. В ходе выполнения отладчика он пропускает цикл for, потому что, когда он добирается до него, цикл for начинается с For i as Integer = 0 to 0, поэтому он не запускается.

Так что прямо сейчас, я не знаю, что делать. Я попытался просто заставить массив удерживать 999 элементов в начале, но это делает вывод отображения неправильной информации.

Итак, мой вопрос заключается в том, как сделать так, чтобы длина массива была равна количеству элементов внутри него.

Заранее спасибо.

+1

'REDIM PRESERVE' – SSS

+2

Я бы посоветовал вам использовать« Список (Double) и не беспокоиться об этом виде микроменеджмента памяти. –

+0

Obvios XY проблема. Основная проблема -> потребности в динамической коллекции, выбранное решение -> есть массив, вопрос -> как изменить размер массива. Реальный ответ на основную проблему - «Список (Double)», как уже отмечал @ZevSpitz. – 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 

Unrelated, но ли вы нас ИНГ массив или список, если вы хотите, чтобы вычислить сумму, вы можете использовать LINQ:

Dim sum = numbers.Sum 

Если вы должны использовать массив по какой-то причине, обратите внимание, что ваш код никогда не увеличивая размер массив (см. this ответ); вы используете ReDim, чтобы преобразовать массив в текущий размер массива.

Кроме того, вы должны использовать Redim Preserve, поэтому вам не нужно копировать содержимое старого массива в новый массив.

Смежные вопросы