填充数组时引用match语句

时间:2019-03-08 01:47:18

标签: arrays scala

我被设置为使用数组创建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()
}

1 个答案:

答案 0 :(得分:2)

您定义了grid,但没有填充它,因此默认情况下将其填充为nullnullNone不同。

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。数组是可变的。该变量通常也不需要是可变的。