带有递归的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中的凯撒密码?的主要内容,如果未能解决你的问题,请参考以下文章