[英]Kotlin - How to create a dynamic matrix?
我想创建一个大小为nxn
的矩阵,其中 n 是输入message:String
的长度。 到目前为止,这是我想到的唯一解决方案,它也有四个 for 循环。
fun main(){
println("Enter the message:")
var message:String = readLine().toString()
var cipher = Array(message.length) { Array<Int>(message.length) {0} }
for(i in 0 .. (message.length - 1)){
for(j in 0 .. (message.length - 1)){
cipher[i][j] = readLine()!!.toInt()
}
}
//print the matrix
for(i in 0..(message.length -1)){
for(j in 0..(message.length -1)){
print(cipher[i][j])
}
println()
}
}
有没有更简单的代码? 如何改进此代码?
假设您的输入数据是row-major ,这可以通过将数组填充逻辑移动到数组创建本身来简化:
var cipher = Array(message.length) {
IntArray(message.length) { readLine()!!.toInt() }
}
Array
的构造函数采用初始化器 function 调用size
次来填充数组。 通过在此处读取用户输入,您可以在创建矩阵时填充数组,避免编写额外的循环。
杂项说明:
readLine().toString()
是多余的并且可能有害。 readLine
返回一个String?
,然后在其上调用Any?.toString
,如果其接收者不是 null,则返回Any.toString
的结果,或者返回文字字符串"null"
(这可能是不需要的。)until
中缀 function ( 0 until length
),而不是0..(length - 1)
(或者更好的是Array.indices
扩展属性。)IntArray
、 FloatArray
等,而不是Array<*>
)也可以看看:
您还可以通过简化代码完全避免 output 循环:
println(cipher.joinToString("\n") { row -> row.joinToString("") })
这是一段更简单的代码:
fun main() {
println("Enter the message:")
var message = readLine()!!
var cipher = Array(message.length) {
IntArray(message.length) { readLine()!!.toInt() }
}
println(cipher.joinToString("\n") { it.joinToString("") })
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.