我被设置为使用数组创建TicTacToe游戏的简单任务。 我有一个带有对象“ X”和“ O”的类“ Player”
我有以下Match语句:
def optPlayerToChar(p: Option[Player]): Char = p match {
case None => ' '
case Some(O) => 'O'
case Some(X) => 'X'
}
我对网格有以下声明:
private var grid: Array[Array[Option[Player]]] = ofDim[Option[Player]](3,3)
我需要能够使用match语句在(x)(y)处填充网格。我已经尝试了很多东西,但由于某种原因似乎无法使其正常工作。抱歉,这只是我忽略的简单解决方案。
它必须采用以下格式,但显然可以正常工作:
grid(x)(y) = optPlayerToChar(p: Option[Player])
我用来显示网格的代码(如果需要的话):
def showGrid() {
println()
for(j <- 0 to 2) {
print(" " + optPlayerToChar(grid(0)(j)))
print(" | " + optPlayerToChar(grid(1)(j)))
print(" | " + optPlayerToChar(grid(2)(j)))
println()
if (j<2) println(" --- --- --- ")
}
println()
}
答案 0 :(得分:2)
您定义了grid
,但没有填充它,因此默认情况下将其填充为null
。 null
与None
不同。
val grid: Array[Array[Option[Player]]] =
Array.fill[Option[Player]](3,3)(None)
有了这个,optPlayerToChar()
和showGrid()
应该按计划工作。
grid(x)(y) = optPlayerToChar(p: Option[Player])
不起作用,因为每个grid
元素都是一个Option[Player]
,但是optPlayerToChar()
返回一个Char
。当然,这些是不相关且不兼容的类型。
注意:没有理由将grid
设为var
。数组是可变的。该变量通常也不需要是可变的。