Kotlin 如何检查矩阵中是否存在字符?

Kotlin 如何检查矩阵中是否存在字符?,kotlin,encryption,Kotlin,Encryption,仅用于上下文:我正在尝试实现Playfair密码。如果你能看一看,了解我的问题,那将非常有帮助 本程序仅适用于某些背景: fun main(){ println("Enter the message:") var message:String = readLine()!!.toUpperCase() println("Enter the key:") var key:String = readLine()!!.toUpper

仅用于上下文:我正在尝试实现Playfair密码。如果你能看一看,了解我的问题,那将非常有帮助

本程序仅适用于某些背景:

fun main(){
    println("Enter the message:")
    var message:String = readLine()!!.toUpperCase()
    println("Enter the key:")
    var key:String = readLine()!!.toUpperCase()

    var cipTable = Array(5){ Array(5){'X'}}

    var j=0; //to iterate througm my key

    for(innerArray in cipTable){
        for(i in innerArray.indices){
            if(key[j++] !in cipTable)
                innerArray[i]+=key[j]
            
            if(j==key.length) break
        }
    }
}
我的主要问题是这一部分:

for(innerArray in cipTable){
        for(i in innerArray.indices){
            if(key[j++] !in cipTable)
我想检查我要插入矩阵中的
键是否已经存在。我也不能使用
innerray
而不是
cipTable
,因为它只会检查同一行中的字符。有没有办法检查整个矩阵中是否存在字符

例如:

fun main(){
    var result = arrayOf(
            intArrayOf(3, 2, 4),
            intArrayOf(6, 7, 9),
            intArrayOf(12, 11, 23)
    )
    
    //To check if 2 is present in the entire matrix/table
    if(result.any { 2 !in it}) println("not present") else print("present")
}

你能告诉我这段代码有什么错误吗?因为输出不是预期的。还有什么方法可以使用forEach进行相同的操作。

如果我理解正确,您希望这个for循环根据任何内部数组是否具有与
字符串相同的字符序列和数量来生成true或false

首先,内部数组应该是
字符数组
,而不是
数组
,以避免装箱

val cipTable = Array(5) { CharArray(5) { 'X' } }
然后,您可以使用
all
contentEquals
检查任何内部字符是否与密钥匹配

val charArrayKey = key.toCharArray()
val isKeyInTable = cipTable.any { it.contentEquals(charArrayKey) }
如果您想跳过将密钥转换为
字符的步骤,可以按如下方式手动检查:

val isKeyInTable = 
    cipTable.any { it.size == key.length && it.withIndex().all { (i, c) -> c == key[i] } }

我想一种方法是使用扩展

fun Array<IntArray>.has(x:Int):Boolean{
    for(innerArray in this){
        if(x in innerArray)
            return true
    }
    return false
}

fun main(){
    var result = arrayOf(
            intArrayOf(3, 2, 4),
            intArrayOf(6, 7, 9),
            intArrayOf(12, 11, 23)
    )

    //To check if 43 or 4 is present in the entire matrix/table
    if(result.has(43)) println("present") else println("not present")
    if(result.has(4)) println("present") else println("not present")
}
fun数组.has(x:Int):布尔值{
for(此中为innerArray){
if(innerArray中的x)
返回真值
}
返回错误
}
主要内容(){
var结果=arrayOf(
第(3,2,4)段,
(6,7,9),
intArrayOf(12、11、23)
)
//检查整个矩阵/表格中是否存在43或4
如果(结果有(43))println(“存在”),否则println(“不存在”)
如果(结果有(4))println(“存在”),否则println(“不存在”)
}

我不想检查
innerArray
是否与整个键匹配,只检查
键[I]
。你关于
any
的回答给了我一个想法,但它不能正常工作。你能看看我的问题吗?我已经做了相应的修改。