gpt4 book ai didi

excel - 忽略 "subscript out of range"错误一次,处理第一次迭代

转载 作者:行者123 更新时间:2023-12-04 22:03:47 26 4
gpt4 key购买 nike

我正在制作一个循环来计算弹丸的轨迹,并希望当弹丸与目标处于相同高度并且弹丸在体面时停止循环。这由 Do Until... 行确保。但是,当循环开始时 y(i-2) 不存在 [y(-1)],导致“运行时错误 '9' - 下标超出范围”。使用“On Error Resume Next”确实允许循环继续,但我经常犯错误,并且在向循环添加更多内容时肯定会犯错误(例如移动目标、偏航、风等)。出于这个原因,我希望 vba 只忽略一次运行时错误并在任何后续错误上中断。

相关部分代码如下:

vx(0) = V * Cos(Theta)  'set the initial conditions
vy(0) = V * Sin(Theta)
vz(0) = 0
x(0) = 0
y(0) = 0
z(0) = 0
i = 1
t = 0

On Error Resume Next
Do Until y(i - 1) < TargetAlt And y(i - 1) < y(i - 2) 'Stop when the projectile is at the same height
'as the target AND the projectile in on the
'decent of its trajectory

'If the projectile is moving up then drag and gravity are working together
'If not drag is working against gravity.
If vy(i - 1) > 0 Then
vy(i) = vy(i - 1) + h * (-g - (DragCof * (vy(i - 1) ^ 2)))
Else: vy(i) = vy(i - 1) + h * (-g + (DragCof * (vy(i - 1) ^ 2)))
End If

'The y position of the projectile
y(i) = y(i - 1) + h * (vy(i - 1))

'x direction velocity
vx(i) = vx(i - 1) + h * (-DragCof * (vx(i - 1) ^ 2))
'The x position of the projectile
x(i) = x(i - 1) + h * (vx(i - 1))

'z direction velocity
'The z position of the projectile

'parameters
t = t + h
i = i + 1

Loop

在 i = 2 处开始循环并相应地调整初始条件可能会起作用,但是如果可能的话,我想避免这种情况。

最佳答案

在某些特殊情况下,别无选择,只能使用 On Error Resume Next用于流量控制——但这不是其中之一。在这种情况下,它只会给你带来痛苦。

通过稍微移动你的逻辑,你可以更简单地处理第一次迭代的边缘情况。例如,停止标准检查可以像这样移动到循环的底部:

Do

'... code to calculate projectile position at this time step...

'Advance to next time step
t = t + h
i = i + 1

'Get out when projectile falls below target height AND is on descent
Loop Until y(i - 1) < TargetAlt And y(i - 1) < y(i - 2)

关于excel - 忽略 "subscript out of range"错误一次,处理第一次迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28980643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com