我想创建一个大小矩阵,nxn
其中 n 是 input 的长度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()
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更简单的代码?如何改进此代码?
假设您的输入数据是row-major,这可以通过将数组填充逻辑移动到数组创建本身来简化:
var cipher = Array(message.length) {
IntArray(message.length) { readLine()!!.toInt() }
}
Run Code Online (Sandbox Code Playgroud)
Array
的构造函数采用一个初始化函数,该函数被调用size
多次以填充数组。通过在此处读取用户输入,您可以在创建矩阵时填充数组,避免编写额外的循环。
其他注意事项:
readLine().toString()
是多余的并且可能有害。readLine
返回 a String?
,然后你调用Any?.toString
它,它要么返回Any.toString
其接收者不为空的结果,要么返回文字字符串"null"
(这可能是不需要的。)until
在循环数组 ( 0 until length
)时考虑使用中缀函数,而不是0..(length - 1)
(或者更好的是使用Array.indices
扩展属性。)IntArray
,FloatArray
等而非Array<*>
)也可以看看:
您还可以通过简化代码来完全避免输出循环:
println(cipher.joinToString("\n") { row -> row.joinToString("") })
Run Code Online (Sandbox Code Playgroud)
这是一段更简单的代码:
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("") })
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
157 次 |
最近记录: |