有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

算法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) 个答案

  1. # 1 楼答案

    现在,想想当句子中有一个“z”时会发生什么。然后,你做出    t[i] = ABC[z (26) + 12] //which is larger than ABC's length

    就我个人而言,我会这样做:

    public char rot13(char s){
        if (c >= 'a' && c <= 'm') return c += 13;
        else if  (c >= 'A' && c <= 'M') return c += 13;
        else if  (c >= 'n' && c <= 'z') return c -= 13;
        else if  (c >= 'N' && c <= 'Z') return c -= 13;
        else return c;
    }