带递归的Java凯撒密码



所以,我试图想出一种方法来加密/解密凯撒密码(你接受一个值,然后沿着字母表多次移动字母,例如,如果密钥是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);
    }

}
}

嘿,在这个逻辑中,您只对最后一个字母进行加密。你必须对所有的字母都这么做。就像@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();
}

最新更新