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