检查矩阵中的侧单元 (Kotlin)

问题描述 投票:0回答:1

我正在开发一个扫雷程序,我需要检查矩阵中的相邻单元格,以按索引计算所选单元格周围有多少个地雷。我对这种语言很陌生,不确定如何检查相邻单元格。有人可以提供帮助吗?我可以回答任何问题或疑虑。

代码:

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()
    }
}
arrays kotlin multidimensional-array
1个回答
1
投票

首先,当你迭代一个数组或列表时,你不应该从 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
,则其右侧没有单元格。

© www.soinside.com 2019 - 2024. All rights reserved.