我正在开发一个扫雷程序,我需要检查矩阵中的相邻单元格,以按索引计算所选单元格周围有多少个地雷。我对这种语言很陌生,不确定如何检查相邻单元格。有人可以提供帮助吗?我可以回答任何问题或疑虑。
代码:
fun countMines(mines: Int) {
val left = 0
val bottom = n
val right = n
val top = 0
for (i in 0 until tablero.size) {
for (j in 0 until i) {
// Check adjacent cells here
}
println()
}
}
首先,当你迭代一个数组或列表时,你不应该从 0 一直迭代到 size,因为它太大了,会超出它的范围(即 size 再为 0 加 1)。您可以使用
0 until tablero.size
或 0..tablero.size - 1
,或者更简单地,您可以使用 indices
,这样您就不必输入范围。
对于迭代外循环列中的行的内部范围,您需要迭代所有行。
i
成为您循环范围的一部分是没有意义的。如果这样做,您只会循环遍历正方形的下三角部分(如果它是方阵)。所以这是解决第一部分的方法:
for (i in tablero.indices) {
for (j in tablero[i].indices) {
val currentCell = tablero[i][j]
// check the neighbors...
}
}
现在我们正在迭代矩阵中的每个单元格坐标。对于每个单元格,您想要查看所有邻居。这是通过从
i
和 j
查找 +1 或 -1 的单元格来完成的。例如,如果我们正在查看单元格 tablero[i][j]
并且我们想要查看其左侧的单元格,我们会检查 tablero[i-1][j]
。当您进行这些检查时,必须小心不要检查越界。例如,如果 i
为零,则左侧没有单元格,并且 tablero[i-1]
会给您一个 IndexOutOfBoundsException,因为不可能有 tablero[-1]
。同样,如果 i
等于 tablero.size - 1
,则其右侧没有单元格。