array.get()索引越界报错求助:数组初始长度为0如何处理?
问题分析与解决方案
核心问题
你遇到的array.get()索引越界报错,虽然外层有array.size(vah_levels) > 0的判断,但可能存在两个隐藏问题:
- 若代码缩进错误(比如
for循环未被if正确包裹),初始阶段vah_levels为空时仍会执行循环,触发报错; trades_taken、val_levels与vah_levels数组大小不一致,循环时取索引i会超出其中某个数组的范围。
解决方案
1. 确保数组大小一致(优先推荐)
因为循环中同时操作三个数组的同索引元素,必须保证它们的大小始终同步——在添加/删除元素时,对三个数组执行相同操作。同时在循环前增加校验:
// 先校验三个数组大小一致且不为空 if array.size(vah_levels) > 0 and array.size(val_levels) == array.size(vah_levels) and array.size(trades_taken) == array.size(vah_levels) for i = 0 to array.size(vah_levels) - 1 if not array.get(trades_taken, i) current_vah = array.get(vah_levels, i) current_val = array.get(val_levels, i) [above_vah, below_val] = f_detect_swing(current_vah, current_val)
2. 单独处理索引越界(应急方案)
如果暂时无法保证数组大小同步,可以在每次调用array.get()前,先判断索引是否在有效范围内:
if array.size(vah_levels) > 0 for i = 0 to array.size(vah_levels) - 1 // 先检查trades_taken的索引有效性 if i < array.size(trades_taken) and not array.get(trades_taken, i) // 再检查vah_levels和val_levels的索引有效性 if i < array.size(vah_levels) and i < array.size(val_levels) current_vah = array.get(vah_levels, i) current_val = array.get(val_levels, i) [above_vah, below_val] = f_detect_swing(current_vah, current_val)
3. 初始数组为空的处理建议
初始阶段数组为空属于正常业务场景,确实需要通过外层的if判断忽略这种情况,避免执行后续的数组操作代码。
内容的提问来源于stack exchange,提问作者Svetoslav Georgiev
相关产品推荐
相关产品推荐

