[英]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.