-1

Java で Rot13 アルゴリズムを作成する独自の方法を見つけようとしていますが、フレーズを試すと、次のエラーが表示されます。

java.lang.ArrayIndexOutOfBoundsException: 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;
    }
}

: Update 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;
    }
}
4

1 に答える 1