首页 > 解决方案 > 执行 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)(作为开始迭代的边界条件);其他变量(双精度列表)已经声明并填充了正数。我在哪里做错了?提前致谢。此致。


编辑: 我尝试以多种方式编辑我的代码。由于我使用的是 List(Of 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 位置并开始从 1 增加 t 并且不再从 0 增加,但我总是出现越界错误。


编辑二:按照建议,我编辑了我的代码,声明了分隔变量,问题似乎出在 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: * 我已经构建了三个不同的 List(of 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

标签: vb.netdo-while

解决方案


推荐阅读