【发布时间】:2019-08-03 01:44:09
【问题描述】:
为什么我的索引超出了mat[i][j] = matrix[i+1][j+1] 的范围?
在下面的函数中,我试图计算矩阵的确定器。
函数eraze 是擦除一行一列,所以当我填充新矩阵(数组)时。异常显示“索引超出范围”。
func det2(matrix :[[Int]] ) -> Int {
var p : Int
p = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]
return p
}
func det(matrix :[[Int]] , fo : Int ) -> Int {
var p2 : Int = 0
if (fo == 2) {
p2 = det2(matrix: matrix)
} else {
for j in 0..<fo {
p2 = matrix[j][0] * det(matrix: eraze(matrix: matrix, nb: j, dim: fo), fo: fo-1)
}
}
return p2
}
func eraze(matrix : [[Int]] , nb: Int , dim : Int) -> [[Int]] {
var mat = [[Int]]()
for i in 0..<dim-1 {
for j in 0..<dim-1 {
if (i == nb ) || (i>nb) {
mat[i][j] = matrix[i+1][j+1]
} else if (i<nb) {
mat[i][j] = matrix[i][j+1]
}
}
}
return mat
}
【问题讨论】:
-
index out of range 错误只有一个原因,那就是你跑到了数组/集合/列表的末尾或其他什么地方。使用调试器逐步检查您的代码以找到导致问题的确切行,然后您可以检查索引的值以找出您在逻辑中犯错的地方。我们无法为您做到这一点。
-
感谢当我使用该函数时,它会将我的函数体返回到我不使用数组的任何维度的行,这就是我感到困惑的原因
-
如果您单步执行代码,调试器应该会准确地告诉您问题发生在哪里。我们没有您的数据,没有您的其余代码,也无法为您调试代码。