我在线程“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];
}
}
}
答案 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是最后一个索引)。