2015-08-24 6 views
0

Я получил несколько массивов, и я хочу сделать следующую математическую операцию:операция Math с массивом, но возникают проблемы с отрицательными числами

For i As Integer = 10 To 100 
    TransmissionArray(i) = (maxFirstArray(i) - mintranArray(i))/(maxSecondArray(i) - mintranArray(i)) 
    i = i + 1 
Next 

Проблема заключается в том, что иногда mintranArray(i) имеет более высокие значения, чем maxFirstArray(i) и maxSecondArray(i). Таким образом, программа вылетает из строя. С Try Catch программа не выключается, но я получаю только TransmissionArray() = Nothing.

+3

Какая конкретная ошибка вы получаете, когда используете инструкцию 'Try ... Catch'? Проблема заключается не в том, что числа являются отрицательными или положительными при делении (если значение mintranArray (I) 'никогда не равно нулю). Похоже, что ваш 'TransmissionArray()' не инициализирован правильно. Не могли бы вы добавить строку, в которой вы объявляете массив? – RianBattle

+0

Dim TransmissionArray() As Double. Я также объявлял другие массивы – Photoniker

+1

Как отметил @RianBattle, функции математики отлично работают даже с отрицательными числами. Если '(maxSecondArray (i) - mintranArray (i)' равно нулю, ваше подразделение вернет 'Infinity'. Это не вызовет исключения и не будет попадаться в ваш блок Try/Catch, но это может вызвать проблемы позже on. – Blackwood

ответ

1

Похоже, что ваш TransmissionArray не инициализирован должным образом. Если вы просто Dim это нравится:

Dim TransmissionArray() As Double 

Тогда это будет Nothing. Если вы попытаетесь присвоить ему значение таким образом, вы получите исключение. Обычно вы можете вставить число в круглую скобку (Dim TransmissionArray(10) As Double), и у вас будет массив длиной 10, который можно сразу начать присваивать значения. Но, если вы не знаете длину, прежде чем руки, я могу думать о двух вариантов, которые будут работать:

Dim TransmissionArray() As Double 
For i As Integer = 10 To 100 
    ReDim Preserve TransmissionArray(i)  'This will increase the size of the array to the value of i, the Preserve keyword also saves the data already stored in the array 
    TransmissionArray(i) = (maxFirstArray(i) - mintranArray(i))/(maxSecondArray(i) - mintranArray(i)) 
    'i = i + 1   'Commented this out...i is already incremented once each loop 
Next 

Или перейти к использованию List(Of Double):

Dim TransmissionArray As New List(Of Double) 
For i As Integer = 10 To 100 
    TransmissionArray.Add((maxFirstArray(i) - mintranArray(i))/(maxSecondArray(i) - mintranArray(i))) 
    'i = i + 1   'Commented this out...i is already incremented once each loop 
Next 

Обратите внимание, что второй метод сделало бы TransmissionArray 10 предметов меньше, чем другие массивы, из-за того, что вы начинаете счетчик контуров For в 10 и просто добавляете элементы в список.

+0

Без проблем @Photoniker , рад, что смогу помочь. – RianBattle

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