Kotlin中如何将坐标数组追加到二维整型数组作为函数返回值
问题根因
- Kotlin 中的
Array是固定长度的静态数组结构,初始化完成后无法直接在原对象上修改长度、增删元素 - 你调用的
plusElement()方法不会修改原数组实例:它的执行逻辑是创建一个全新的数组,把原数组的所有元素、待追加的新元素依次拷贝进新数组后返回。你之前的代码没有把这个返回的新数组赋值给原temp变量,方法调用完成后原数组仍然是空状态,自然达不到追加效果。
修正方案
方案1:最小改动适配现有数组逻辑
只需要把原来没有接收返回值的调用,改成对temp变量的重新赋值即可:
// 原有错误代码 temp.plusElement(slice) // 修正后代码,将方法返回的新数组覆盖赋值给temp temp = temp.plusElement(slice)
注意:这种写法每次追加元素都需要全量拷贝数组内容,当循环遍历次数较多时会产生不必要的性能消耗。
方案2:适配动态采集场景的更优写法
你需要在循环中持续追加坐标数据,更合理的实现是在遍历阶段使用可变长度的集合存储数据,等所有坐标采集完成后,再转换成函数要求的 Array<Array<Int>> 类型返回:
- 初始化可变列表替代静态空数组:
val tempList = mutableListOf<IntArray>() - 循环中符合追加条件时,直接调用列表的追加方法,无需手动处理数组拷贝:
val slice = intArrayOf(xstart, ystart - i) tempList.add(slice) - 原代码中需要清空临时存储的场景(比如越界判断后要将临时结果置空),直接调用列表的清空方法即可:
tempList.clear() - 所有遍历逻辑完成后,将列表转换成目标数组类型返回:
val result: Array<Array<Int>> = tempList.toTypedArray()
内容的提问来源于stack exchange,提问作者RileyRat5x
相关产品推荐
相关产品推荐

