【发布时间】:2015-04-09 19:11:51
【问题描述】:
我知道有很多关于 Caesar Cipher 的话题,但我喜欢用自己的方式解决问题。 因此它不起作用,但我想在一些帮助下,我可能会按照我的方式让它工作。我相信你们都知道当你一个人解决问题时那种美好的感觉。
所以这是我的想法。 制作由字母组成的字符数组。 以及带有消息到代码的字符串。 2 for 循环。一个从消息中设置字符的外部, 和通过字母数组扫描的内部。 当消息中的字母遇到数组中的字符时,它会用数组中的第 3 个(3 的键)字符替换他。
这是现在写的一段代码:
char[] alphabet = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'o', 'p','r','s','t','u', 'v', 'z'};
String message = " This is message for coding";
message = message.toLowerCase();
String codedMsg = "";
for(int i = 0; i < message.length(); i++)
{
for(int j =0; j < alphabet.length; j++)
{
if(message.charAt(i) == alphabet[j])
{
codedMsg += alphabet[j +3 ];
运行良好,但运行时收到以下错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 23
at sifra.main(sifra.java:19)
【问题讨论】:
-
alphabet[j + 3]在迭代结束时无效 -
即使你修复了这个异常,代码仍然不能正常工作。 String.replace 将不加选择地替换任何出现的字符,因此您可能会替换已替换的字符。例如。 “abcd”会变成“gefg”,而不是“defg”。
-
我现在已经解决了,感谢 Alfred Åkesson。只是不知道我应该把固定程序放在这里还是不放。
标签: java