Индекс вне диапазона, выполняющий цикл Do While

#vb.net #do-while

#vb.net #do-while

Вопрос:

Я пытаюсь выполнить итеративное исчисление через цикл Do while / until. Я установил его, но во время отладки я получаю обратно эту ошибку: Index was out of range. Must be non-negative and less than the size of the collection. Это код, который я использую:

 t=0    
Do While TEMsprinkler(t) < CInt(TextBox12.Text)
            t  = 1
            TEMsprinkler(t   1) = (TEMsprinkler(t)   ((tjet(t   1) - TEMsprinkler(t)) * (1 - Math.Exp(-1 / tau(t   1))))   ((tjet(t   1) - tjet(t)) * t * ((Math.Exp(-1 / tau(t   1))) - (1 / tau(t   1)) - 1)))
Loop
  

Теперь я не могу понять, где может быть ошибка: объявлен TEMsprinkler(t) (как граничное условие для начала итерации); другие переменные (список double) уже объявлены и заполнены положительными числами. Где я делаю неправильно? Заранее спасибо. С наилучшими пожеланиями.


Редактировать: я пытался отредактировать свой код несколькими способами. Поскольку я работаю со списком (из Double), а не с массивами, я отредактировал строку TEMsprinkler следующим образом:

 Do While TEMsprinkler(t) < CInt(TextBox12.Text)
     t  = 1
     TEMsprinkler.Add(TEMsprinkler(t)   ((tjet(t   1) - TEMsprinkler(t)) * (1 - Math.Exp(-1 / tau(t   1))))   ((tjet(t   1) - tjet(t)) * t * ((Math.Exp(-1 / tau(t   1))) - (1 / tau(t   1)) - 1)))
Loop
  

Я возвращаюсь к той же ошибке. Затем я попытался отредактировать позицию индекса: индекс t 1 стал t, а индекс t стал позицией t-1 и начал увеличивать t с 1 и не более с 0, но у меня всегда ошибка out-bounds.


Редактирование II: как и было предложено, я отредактировал свой код, объявив отдельные переменные, и проблема, похоже, находится в строке Do While:

 t=1
Do While TEMsprinkler(t) < CInt(TextBox12.Text)
    t  = 1
    Dim TSPKITEM = TEMsprinkler(t)
    Dim TJITEM = tjet(t)
    Dim ITEMTJ = tjet(t   1)
    Dim TAUITEM = tau(t   1)
    TEMsprinkler.Add(TSPKITEM   ((ITEMTJ - TSPKITEM) * (1 - Math.Exp(-1 / TAUITEM)))   ((ITEMTJ - TJITEM) * t * ((Math.Exp(-1 / TAUITEM)) - (1 / TAUITEM) - 1)))
Loop
  

Очевидно, что ошибка всегда одна и та же.


Редактирование III: * Я создал три разных списка (Double) с их нижним граничным условием, которые понадобятся мне для выполнения итераций. Размерность этих списков больше, чем значение CInt(Textbox12.Text). Затем я объявил цикл Do While для создания переменной TEMsprinkler (также объявленной как List (of Double)). Вот код:

 Dim tjet As New List(Of Double)()
Dim ujet As New List(Of Double)()
Dim tau As New List(Of Double)()
Dim TEMsprinkler As New List(Of Double)()
Dim t As Integer
t = 1
TEMsprinkler.Add(CDbl(TextBox8.Text))
tjet.Add(CDbl(TextBox8.Text))
ujet.Add(0)
tau.Add(0)
For i = 1 To CInt(Form3.ListBox1.Items.Count) - 1
     tjet.Add(CDbl(TextBox8.Text)   (5.38 * ((CDbl(Form3.ListBox1.Items(i)) / r) ^ 0.666) / h))
     ujet.Add(0.197 * (CDbl(Form3.ListBox1.Items(i)) ^ 0.333) * (h ^ 0.5) / r ^ 0.833)
     tau.Add((CInt(TextBox2.Text) / (ujet(i) ^ 0.5)))
Next
Do While t < TEMsprinkler.Count - 1 AndAlso TEMsprinkler(t) < CInt(TextBox12.Text)
    t  = 1
    Dim TSPKITEM = TEMsprinkler(t)
    Dim TJITEM = tjet(t)
    Dim ITEMTJ = tjet(t   1)
    Dim TAUITEM = tau(t   1)
    TEMsprinkler.Add(TSPKITEM   ((ITEMTJ - TSPKITEM) * (1 - Math.Exp(-1 / TAUITEM)))   ((ITEMTJ - TJITEM) * t * ((Math.Exp(-1 / TAUITEM)) - (1 / TAUITEM) - 1)))
Loop
  

Комментарии:

1. Как только вы дойдете до конца своей коллекции, вы получите исключение index out of range, потому что вы увеличиваете значение t , но сразу после этого получаете TEMsprinkler(t 1) . Удалите 1 , и все должно быть хорошо.

2. @David спасибо за комментарий. Я отредактировал свой ответ, учитывая ваше предложение.

3. Попробуйте разделить значения на переменные, чтобы при возникновении исключения вы точно знали, где оно возникает. Например.: Dim temSprinnklerItem = TEMsprinkler(t) Dim tjetItem = tjet(t 1) Dim tauItem = tau(t 1) 'etc...

4. @David Я снова отредактировал свой пост. К сожалению, всегда появляется одна и та же ошибка.

5. Я полагал, что вы получите ту же ошибку, но в какой строке возникает ошибка?