算法Rot13 Java怎么了?
我一直在试图找到自己用java制作Rot13算法的方法,但当我尝试一个短语时,它给了我以下错误:
爪哇。lang.ArrayIndexOutofBounds异常:41
这是我的代码:
:更新全名
public class Rot13
{
char[] translated;
String abc = "abcdefghijklmnopjrstuvwxyzabcdefghijklmnopqrstuvwxyz";
public String ROT13(String input){
input = input.toLowerCase();
char[] sentence = input.toCharArray();
char[] ABC = abc.toCharArray();
int x = input.length();
int y = 0;
char[] translated = new char[x];
for(int i = 0; i<x;i++){
int z = 0;
if(sentence[i] == ' '){
translated[i] = ' ';
}
else {
while(y==0){
if (sentence[i] == ABC[z]){
y =1;
}
else{
z += 1;
}
}
translated[i] = ABC[z+12];
}
}
String rot13string = new String(translated);
return rot13string;
}
}
:更新2 我刚刚再次测试了这个版本,它翻译了这个版本。但如果用错误的方式,例如,“Hello”变成“tmmmm”。第一个字母似乎是对的,但接下来的字母总是“m”
更新3:谢谢你们的回答,伙计们,这是我的最终代码,我刚刚把我的字母表复制了“几次”:
public class ROT13
{
char[] translated;
String ab = "abcdefghijklmnopjrstuvwxyzabcdefghijklmnopqrstuvwxyz";
String abc = String.format("%0" + 1000 + "d", 0).replace("0",ab);
public String ROT13(String input){
input = input.toLowerCase();
char[] sentence = input.toCharArray();
char[] ABC = abc.toCharArray();
int length = input.length();
char[] translated = new char[length];
for(int i = 0; i<length;i++){
int y = 0;
int h = 0;
if(sentence[i] == ' '){
translated[i] = ' ';
}
else {
while(y==0){
int z = 0;
if (sentence[i] == ABC[h]){
y +=1;
}
else{
z += 1;
h += 1;
}
}
translated[i] = ABC[h+13];
}
}
String rot13string = new String(translated);
return rot13string;
}
}
# 1 楼答案
现在,想想当句子中有一个“z”时会发生什么。然后,你做出
t[i] = ABC[z (26) + 12] //which is larger than ABC's length
就我个人而言,我会这样做: