首页 > 解决方案 > 尽管 getter 和 setter 无法在 Kotlin 中用括号填充二维数组

问题描述

它应该成为一个小控制台程序,但我不能用括号填充我在课堂上创建的二维数组FieldPlayer因为尽管有一个应该适合的 set 函数“有很多参数”。我还了解到,在 Kotlin 中甚至没有必要。所以我有点困惑,没有进一步。

fun main() {
val gameField = Field()

gameField.buildField()

val player = Player(gameField.field)

gameField.printField()

var input: String? = " "

while (input != "x") {

    println("w: ↑ a: ← s: ↓ d: →")
    input = readLine()
    when (input) {
        "w" -> player.counter = 0
        "a" -> player.counter = 1
        "s" -> player.counter = 2
        "d" -> player.counter = 3
        "x" -> return println("Spiel wird beendet")
        " " -> player.move()
        else -> println("Ungültige Eingabe")
    }
    player.setPlayer()
    gameField.printField()
}

}

class Field() {
private var field = Array(10) {Array(10){" "}}

operator fun set(row: Int, col: Int, value: String) {
    field[row][col] = value
}
operator fun get(row: Int, col: Int) = field[row][col]

fun buildField() {
    for (i in field.indices) {
        field[i][0] = "# "
        field[i][field.size - 1] = "# "
        for (j in 1 until field.size - 1) {
            field[i][j] = "  "
            field[0][j] = "# "
            field[field.size - 1][j] = "# "
        }
    }
}

fun printField() {
    for (i in field.indices) {
        for (j in field[i].indices) {
            print(field[i][j])
        }
        println()
    }
}

}

class Player(private var gameField: Array<Array<String>>) {
private val playerSign = arrayOf<String>("↑ ", "← ", "↓ ", "→ ")
var currentRow = 4
var currentColumn = 4
var counter = 0

init {
    setPlayer()
}

fun setPlayer() {
    gameField[currentRow, currentColumn] = playerSign[counter]
}

fun reset() {
    gameField[currentRow, currentColumn] = "  "
}

fun move() {
    reset()
    when(counter) {
        0 -> if (currentRow > 1) currentRow--
        1 -> if (currentColumn > 1) currentColumn--
        2 -> if (currentRow < gameField.size-2) currentRow++
        3 -> if (currentColumn < gameField.size-2) currentColumn++
    }
    setPlayer()
}

}

提前致谢!

标签: arrayskotlinmultidimensional-arrayoperator-keywordgetter-setter

解决方案


你的代码的问题是 in classPlayer field是 type Field,它不是 an array,这就是编译器给你错误的原因。如果你想访问Field类的字段数组,那么你应该这样做

field.field[3][3] = playerSign[counter]

推荐阅读