线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:26

时间:2013-05-06 12:31:08

标签: java arrays encryption

我在线程“main”java.lang.ArrayIndexOutOfBoundsException中遇到错误Exception:当我尝试运行某些字母(e)并且我不知道如何解决它时,我的代码中有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 个答案:

答案 0 :(得分:4)

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

如果alphabet[26]j == 12,此代码将访问plaintext[i]==alphabet[j]。您的数组的索引 0-25 。 Java数组具有零基索引。

答案 1 :(得分:3)

如果它包含26个字符(如你所说),则最后一个索引是25而不是26.这会导致问题。

您有j<=12所以当j为12时,您的索引为26(j+14)且不在数组中。

答案 2 :(得分:3)

您的边缘情况为j == 12而您取消引用alphabet[j+14] == alphabet[26]

答案 3 :(得分:3)

j为12时,您将获得 26 。由于Java中的数组是从零开始的数组,因此数组索引从0到25,因此26是outOfBounds。

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

另外,你的for循环应该是for(int j = 0 ; j<26;j++){(别担心,25是最后一个索引)。

顺便说一下,你获得的例外情况非常丰富。在这种情况下,使用调试器会有很多帮助。