Kotlin-如何实施围栏密码?

问题描述

我正在研究Rail Fence Cipher加密。

fun main(){
    println("Enter the message:")
    var message:String = readLine()!!.toupperCase()
    println("Enter the key:")
    var key:Int = readLine()!!.toInt()
    var skip:Int = 2*(key-1)
    var j=0
    var encryptedMsg:String=""
    var key1 = key

    while(key1>0){
        for(i in (key-key1)..message.length step  skip){
            if(i<=message.length-1)
                encryptedMsg+=message[i]
        }
        key1-=1
        skip = 2*(key1-1)
    }
    println("Encrypted Message: $encryptedMsg")
}
I am having trouble with the last row.

在这里遇到错误Step must be positive,was: 0。我也知道步骤对最后一行不起作用。还有其他选择吗?

解决方法

fun main(){
    println("Enter the message:")
    var message:String = readLine()!!.toUpperCase()
    println("Enter the key:")
    var key:Int = readLine()!!.toInt()
    var skip:Int = 2*(key-1)
    var j=0
    var encryptedMsg:String=""
    var key1 = key

    while(key1>0){
        for(i in (key-key1)..message.length step  skip){
            if(i<=message.length-1)
                encryptedMsg+=message[i]
        }
        key1-=1
        skip = 2*(key1-1)
        if(skip==0) skip=2*(key-1)  //This solves the problem
    }
    println("Encrypted Message: $encryptedMsg")
}

不过,如果有人在没有两个循环的情况下有更好的建议,我想知道。谢谢。