如何压缩这些循环?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何压缩这些循环?相关的知识,希望对你有一定的参考价值。
我写了100多行代码,我知道一定有办法用更少的代码来完成这个任务。我想检查双数组中的值是否等于".",然后用用户输入的 "X "或 "O "代替。从最底层开始,就像他们是连接4游戏中的棋子一样。我已经为每一列写了一个循环来搜索行。我还没有找到一种不改变该列中每个". "的方法。这是一个用户的一列。
var gameBoard = Array(8){ Array(8){"."} }
fun checkOneX( ): Array<Array<String>> {
when {
gameBoard[7][0] == "." -> {
gameBoard[7][0] = "X"
}
gameBoard[6][0] == "." -> {
gameBoard[6][0] = "X"
}
gameBoard[5][0] == "." -> {
gameBoard[5][0] = "X"
}
gameBoard[4][0] == "." -> {
gameBoard[4][0] = "X"
}
gameBoard[3][0] == "." -> {
gameBoard[3][0] = "X"
}
gameBoard[2][0] == "." -> {
gameBoard[2][0] = "X"
}
gameBoard[1][0] == "." -> {
gameBoard[1][0] = "X"
}
gameBoard[0][0] == "." -> {
gameBoard[0][0] = "X"
}
else -> {
println("There are no more spaces in this column")
}
答案
这可以是一个简单的替换你的 when
声明
gameBoard.findLast { it[0] == "." }?.set(0, "X") ?: println("No spaces")
另一答案
如果你需要替换内数组中的每个元素,你可以这样做。
var gameBoard = Array(8) { Array(8) { "." } }
val resultList: List<List<String>> = gameBoard.map { innerArray ->
innerArray.map {
if (it == ".") "X" else it
}
}
如果你只需要替换第一个元素(请注意,你可以在数组中替换第一个元素 resultList
type changed)。)
var gameBoard = Array(8) { Array(8) { "." } }
val resultList: List<Array<String>> = gameBoard.map { innerArray ->
val first = innerArray.first() // Expected that first element is present and not null
innerArray.set(0, if (first == ".") "X" else first)
innerArray
}
如果你需要保存类型 Array<Array<String>>
使用 toTypedArray()
职能。
var gameBoard = Array(8) { Array(8) { "." } }
gameBoard = gameBoard.map { innerArray ->
innerArray.map {
if (it == ".") "X" else it
}.toTypedArray()
}.toTypedArray()
以上是关于如何压缩这些循环?的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围