-- 匿名 codeblock; 文件名: ; 位置: 1385; line: 50 中发生错误 -- 运行时错误: 阵列索引必须正数,得到的是: 0 -- MAXScript 调用栈: -- 线程数据: 线程ID:10684 -- ------------------------------------------------------ -- [堆栈级别: 0] -- 于 sortPointsByDistance(); 文件名: ; 位置: 1386; 行: 50 -- 参数: -- points: #([8.43289,1.64646,171.956], [-363.739,1.64647,248.472], [425.193,1.64647,307.104], [8.48561,1.64647,413.373]) -- 局部: -- Sorted: #() -- closestIndex: 0 -- unsorted: #([8.43289,1.64646,171.956], [-363.739,1.64647,248.472], [425.193,1.64647,307.104], [8.48561,1.64647,413.373]) -- points: #([8.43289,1.64646,171.956], [-363.739,1.64647,248.472], [425.193,1.64647,307.104], [8.48561,1.64647,413.373]) -- lastPoint: undefined -- mindist: 1e+09 -- 外部: -- index1: Global:index1 : 0 -- panduan: Global:panduan : 1 -- owner: undefined -- findPointIndex: Global:findPointIndex : findPointIndex() -- FirstavgCenter: Global:FirstavgCenter : [36.0821,-266.531,257.64] -- ------------------------------------------------------ -- [堆栈级别: 1] -- 从以下中调用 顶层级
时间: 2025-07-05 20:07:16 浏览: 3
在MAXScript中,出现“Array index must be positive, got 0”错误通常意味着尝试访问数组中的索引为`0`,而 MAXScript 的数组索引是从 `1` 开始的,而不是从 `0`。这与许多其他编程语言(如 Python 或 JavaScript)不同。
### 错误示例
以下是一个会导致此错误的代码片段:
```maxscript
myArray = #(10, 20, 30)
print myArray[0] -- 这里将触发错误
```
由于索引 `0` 并不存在于 MAXScript 数组中,因此会引发运行时错误。
### 正确的索引方式
应该使用从 `1` 开始的索引访问数组元素。例如:
```maxscript
myArray = #(10, 20, 30)
print myArray[1] -- 输出 10
print myArray[2] -- 输出 20
print myArray[3] -- 输出 30
```
### 避免错误的常见方法
1. **确保循环条件正确**
如果在遍历数组时发生错误,请检查循环变量是否从 `1` 开始:
```maxscript
myArray = #(10, 20, 30)
for i = 1 to myArray.count do
print myArray[i]
```
2. **验证索引范围**
在访问数组之前,可以先检查索引是否在有效范围内:
```maxscript
myArray = #(10, 20, 30)
i = 0
if i > 0 and i <= myArray.count then
print myArray[i]
else
print "Index out of bounds"
```
3. **处理用户输入或外部数据源**
如果索引来源于用户输入、文件读取或外部 API 数据,务必进行校验和转换,以确保它们符合 MAXScript 的数组索引规范。
4. **调试技巧**
可以通过打印数组长度和索引值来辅助调试:
```maxscript
myArray = #(10, 20, 30)
i = get userInput() -- 假设这是获取用户输入的方法
format "Array count: %, Index requested: %" myArray.count i
```
### 示例:安全访问数组元素
下面是一个完整的示例,展示如何安全地访问数组元素并避免索引错误:
```maxscript
fn safeArrayAccess arr index =
(
if classOf arr == Array and index >= 1 and index <= arr.count then
arr[index]
else
undefined
)
myArray = #(5, 10, 15)
result = safeArrayAccess myArray 2
if result != undefined do
print result
else
print "Invalid index or not an array"
```
---
阅读全文
相关推荐

















