0

java.lang.ArrayIndexOutOfBoundsException特定の文字 (e) を実行しようとすると、エラー Exception in thread "main" : 26 がコードに表示され、解決方法がわかりません。

配列には 26 文字 (アルファベットの各文字) が含まれます。誰でもコードの問題を見ることができますか?

//Breaking up the letters from the input and placing them in an array
char[] plaintext = input.toCharArray();
//For loops that will match length of input against alphabet and move the letter 14 spaces
for(int i = 0;i<plaintext.length;i++) {
    for(int j = 0 ; j<25;j++) {
        if(j<=12 && plaintext[i]==alphabet[j]) {
            plaintext[i] = alphabet[j+14];
            break;
        }
        //Else if the input letter is near the end of the alphabet then reset back to the start of the alphabet
        else if(plaintext[i] == alphabet[j]) {
            plaintext[i] = alphabet [j-26];
        }
    }
}
4

4 に答える 4

4
if(j<=12 && plaintext[i]==alphabet[j]) {
     plaintext[i] = alphabet[j+14];
     break;
}

このコードはalphabet[26]ifj == 12とにアクセスしますplaintext[i]==alphabet[j]。配列のインデックスは0-25です。Java 配列には、ゼロベースのインデックスがあります。

于 2013-05-06T12:33:56.933 に答える
3

あなたはエッジケース whereを持っていて、あなたは==j == 12を逆参照しています。alphabet[j+14]alphabet[26]

于 2013-05-06T12:33:41.470 に答える
3

jが 12 の場合、26得られます。Java の配列は0から始まる配列であるため、配列のインデックスは 0 から 25 であり、26 は outOfBounds です。

  if(j<=12 && plaintext[i]==alphabet[j]){
     //Check if j+14 doesn't exceed 25

もう 1 つのこととして、for ループは次のようになりますfor(int j = 0 ; j<26;j++){(心配しないでください。25 が最後のインデックスです)。

ところで、あなたが得ている例外は非常に有益です。このような場合、デバッガーを使用すると非常に役立ちます。

于 2013-05-06T12:33:50.077 に答える