java 数组索引越界:第 17 行:java.lang.ArrayIndexOutOfBoundsException:索引 119 越界,长度为 26

java array index out of bound: Line 17: java.lang.ArrayIndexOutOfBoundsException: Index 119 out of bounds for length 26

class Solution {
    public boolean isAlienSorted(String[] words, String order) {
        int[] new_alphabet = new int[26];
        for(int i=0; i<order.length();i++){
            new_alphabet[order.charAt(i)-'a'] = i;
        }

        for(int i=0;i<words.length;i++){
            for(int j=i+1;j<words.length;j++){
                int min = Math.min(words[i].length(), words[j].length());
                    for(int k=0;k<min;k++){
                        char ichar = words[i].charAt(k);
                        char jchar = words[j].charAt(k);
                        if(new_alphabet[ichar-'a']<new_alphabet[jchar-'a']){
                            break;
                        }
                         if(new_alphabet[jchar-'a']<new_alphabet[ichar]-'a'){
                            return false;
                        }

                        else if(k==min-1&&words[i].length()>words[j].length()){
                            return false;
                        }
                    }
            }
        }
        return true;

    }
}

希望有人能把我救出来。我已经检查了这段代码几次,但仍然不知道我哪里错了。

java 运行 时间 error:Line 17:java.lang.ArrayIndexOutOfBoundsException:索引 119 超出长度 26

检查这个:

for(int i=0;i<words.length;i++){
            for(int j=i+1;j<words.length;j++){

如果 i 转到最后一个索引,则 j 将是 i + 1。所以 j 会 尝试索引一个超过限制。

所以外循环应该去words.length - 1.

更正,应该是。

for(int i=0;i<words.length-1;i++) {
       for(int j=i+1;j<words.length;j++){

你也犯了这个错误

  if(new_alphabet[jchar-'a']<new_alphabet[ichar]-'a'){
                            return false;
                        }

应该是[ichar - 'a']