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