arrays - 尽管 getter 和 setter 无法在 Kotlin 中用括号填充二维数组
问题描述
它应该成为一个小控制台程序,但我不能用括号填充我在课堂上创建的二维数组Field
,Player
因为尽管有一个应该适合的 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()
}
}
提前致谢!
解决方案
你的代码的问题是 in classPlayer
field
是 type Field
,它不是 an array
,这就是编译器给你错误的原因。如果你想访问Field
类的字段数组,那么你应该这样做
field.field[3][3] = playerSign[counter]
推荐阅读
- vue.js - 安装 VueJS CLI 时如何修复 npm WARN deprecated 错误
- python - 拆分字符串行代码而不拆分其输出
- asp.net-core - 如何在.net核心中为多个请求运行api
- c++ - 为什么我不能将 rand() 与数组的大小一起使用?
- html - 为什么我的链接样式表中的某些 CSS 格式未应用?
- c# - 有没有办法在 SinglePage 中包含 2 个 Angular 应用程序?
- android - Android:如何断开已连接的蓝牙设备?
- xamarin - 条目未使用可绑定属性清除
- html - 使用 Powershell 保存 iframe 内容
- azure - AKS 添加新池