繁体   English   中英

Scala没有遍历for循环

[英]Scala is not looping through the for loop

我有一个任务,需要在Scala中连续开发N。 对于板的表示,我想遍历2d数组并打印X'en O's。 这是该代码:

  override def toString(): String = {
    val repres = ""

    for (rowIndex <- 0 until board.length - 1) {
      for (columnIndex <- 0 until board(rowIndex).length - 1) {
        if (board(rowIndex)(columnIndex) == Player.Player1) {
          repres + "X"
        } else if (board(rowIndex)(columnIndex) == Player.Player2) {
          repres + "O"
        } else if (board(rowIndex)(columnIndex) == Player.NoPlayer) {
          repres + "_"
        } else {
          throw new IllegalArgumentException
        }
      }
      repres + Properties.lineSeparator
    }
    repres
  }

这是董事会:

var board = Array.fill[Player](rows,columns) {Player.NoPlayer}

由于某些原因,即使board.length在调试中为6,它也不会通过for循环。

我是scala的新手,所以可能有一些很明显的错误,我只是没有发现。

谢谢您的帮助

我认为问题不是循环。 您是否希望repres改变?

您已将repres声明为不可变的String 您正在执行的所有操作都是徒劳的,它在每个分支中创建一个新的String,但您没有将其分配给任何东西。 最后一条语句以空String返回repres

尝试将声明更改为var repres

然后,每个分支都需要更改为repres = repres + "X"等。

请注意,这并不是真正的功能。 它只是适应Scala语法的Java。

您不应该使用可变变量。 它们使代码的可读性降低,并且难以推理,并且可能会产生许多难以调试的问题。

在Scala中有95%的用例中,您不需要可变状态,因此我的建议是,您只是假装它根本不存在,直到您对语言有足够的了解以能够明确地区分其他5%为止。案件。

 val repres = board.flatten.map { 
   case Player.Player1 => "X"
   case Player.Player2 => "O"
   case _ => "_"
 }.mkString
  .grouped(board.length)
  .mkString(Properties.lineSeparator)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM