我刚开始学习Scala,尝试编写一个简单的游戏来学习它的语法和一些基本规则。如果有人能帮我解决一个简单的问题,我将不胜感激。我创建了一个充满“。”的简单板。现在我想换一个“。”在某个指数上并放在“X”。在java中它看起来像这样:
board[col][row] = symbol;
这是董事会成员:
val board = {
collection.mutable.ArrayBuffer[String]()
collection.mutable.ArrayBuffer.fill(cols, rows)(".")
}
def show(): Unit = {
board.foreach(x => println(x.mkString))
}
def setField(col:Int, row:Int, fieldSymbol:String): Unit = {
//fieldSymbol on index, which is (col*row) as it's 1d array
//thought board.apply(col*row): fieldSymbol might work but it's not
//correct I guess
}
非常感谢任何帮助。提前感谢您的建议。
答案 0 :(得分:1)
你可以为像这样的平面数组实现setField
def setField(c: Int, r: Int, v: String) {
board(c * rows + row) = v
}
但是,如果您想将多维数据存储在单个数组中,这是一个好主意(如果您关心分配结构和类似的东西,这可能会很有趣)。在这种情况下,我建议写一个泛型方法setField。
如果您想要数组数组,则填充已经为您提供了
val board = ArrayBuffer.fill(rows, cols)(".")
然后就像这样更新
board(x)(y) = "something"
但是,您应该问自己是否确实需要可变数据结构,并且使用不可变数据结构无法更好地表达您的程序。而且,如果你真的想要一个二维向量,如果你想将某些东西表示为一个对象板,特别是如果你的大部分板都是空的"。使用地图可能会更优雅:
val board = Map[(Int, Int), String]() // empty board
val nextBoard = bord + ((2,3) -> "something")