带有递归的Java中的凯撒密码?

Posted

技术标签:

【中文标题】带有递归的Java中的凯撒密码?【英文标题】:Caesar cipher in Java with recursion? 【发布时间】:2015-05-15 04:04:43 【问题描述】:

所以,我正在尝试想出一种方法来对凯撒密码进行加密/解密(在其中输入一个值,然后沿字母表多次移动字母,例如,如果密钥是 3,那么 a 会变成 d,b 会变成 e,c 会变成 f 等等)但我需要使用递归,而不是迭代。这是我到目前为止所拥有的,但它只是加密最后一个字符,并输出“Encrypted - w”,这对我来说没有意义。

public class Driver 

static String encrypted = "";

public static void main(String[] args) 

    System.out.println("Encrypted - " + cipher("encrypt", 3));



public static String cipher(String str, int i)
    char ch = str.charAt(0);
    StringBuffer output = new StringBuffer();
    if (str.length() <= 1) 
            ch = (char) ('a' + (ch - 'a' + i) %26);
            output.append(ch);
            return output.toString(); 
    
    else
        return cipher(str.substring(1),i);

    





【问题讨论】:

您在 else 中只返回加密的“尾巴”。需要与头部结合。 谢谢!我是这么想的……但是你说的头是什么意思?我将如何改变它? return cipher(str.substring(1),i); 这仅返回字符串的结尾。您需要考虑如何将它与非结束部分结合起来以获得整个字符串。 【参考方案1】:

嘿,在这个逻辑中,您只对最后一个字母进行加密。你必须为所有的字母做这件事。正如@Thilo 正确地所说,你也必须照顾好头部。 可行的解决方案是这样的:

public static String cipher(String str, int i) 
    char ch = str.charAt(0);
    StringBuffer output = new StringBuffer();
    ch = (char) ('a' + (ch - 'a' + i) % 26);
    output.append(ch);

    if (str.length() > 1) 
        output.append(cipher(str.substring(1), i));
    

    return output.toString();

【讨论】:

以上是关于带有递归的Java中的凯撒密码?的主要内容,如果未能解决你的问题,请参考以下文章

凯撒密码加密解密--JAVA实现(基础)

需要对凯撒密码中的代码进行解释

什么是凯撒加密法?

Go 语言入门很简单:Go 实现凯撒密码

凯撒密码实现英文短句的加解密

变异凯撒