java数组索引超出范围:第17行:java.lang.ArrayIndexOutOfBoundsException:索引119超出长度26

时间:2020-06-14 02:37:33

标签: java computer-science

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运行时错误:第17行:java.lang.ArrayIndexOutOfBoundsException:索引119的长度为26超出范围

1 个答案:

答案 0 :(得分:0)

检查:

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']