TI-BASIC实现插入排序偶发INVALID DIMENSION维度错误求解
问题根因
偶发报错来自TI-BASIC逻辑与(and)运算无短路求值特性,是你对不同语言逻辑运算规则的差异判断遗漏导致的问题:
- 你写的循环条件
While J>0 and L₁(J)>K在常见高级语言中会优先判断J>0,如果该条件不成立就直接终止判断,不会执行后半段的L₁(J)>K,但TI-BASIC的逻辑运算会无条件计算and两侧的所有表达式,再汇总判断逻辑结果 - 当插入的元素比当前已排序区间所有元素都小的时候,
J会递减到0,此时TI-BASIC仍然会尝试访问L₁(0),但TI系列计算器的列表索引从1开始,不存在下标为0的元素,就会触发INVALID DIMENSION报错 - 报错偶发的原因也在这里:只有当插入元素是当前已排序区间最小值时才会触发该场景,其他时候
J不会减到0,代码就能正常运行
修复方案
把单层while循环的判断逻辑拆分,避免J=0时访问列表元素即可:
0→dim(L₁ // clear the list L1 randIntNoRep(1,5,5)→L₁ For(I,2,5) L₁(I)→K I-1→J While J>0 If L₁(J)≤K Then Break // 找到插入位置直接退出循环 End L₁(J)→L₁(J+1) J-1→J End // end while K→L₁(J+1) End // end for Disp L₁
调整后列表值判断仅在确认J>0时执行,完全规避下标越界问题。
内容的提问来源于stack exchange,提问作者Robin Andrews
相关产品推荐
相关产品推荐

