我试图在给定的输入句子中找到单词的字谜。这是我在运行程序时得到的例外。是不是因为列表大小的变化?请帮我解决问题。
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 66, Size: 66
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at MyClass.main(MyClass.java:28)
这是我的源代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class MyClass {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String wordin = sc.nextLine().toLowerCase();
sc.close();
List<String> word = new ArrayList<String>(Arrays.asList(wordin.split("\\s+"))); // splits the whole string into array of words
ArrayList<String> sorted = new ArrayList<String>();
int i,j;
for (i = 0; i < word.size(); i++) { // loop to sort letters of a particular word
word.set(i, word.get(i).replaceAll("[^\\w]", ""));
char[] ar = word.get(i).toCharArray();
Arrays.sort(ar);
sorted.add(String.valueOf(ar)); // add the sorted word to list
}
for(i=0;i<sorted.size();i++){
for(j=i;j<sorted.size();j++){
char[] ar = word.get(j).toCharArray();
Arrays.sort(ar);
String current = String.valueOf(ar);
if(current.equals(sorted.get(i))){
System.out.println(word.get(j));
word.remove(j);
}
}
}
}
}
答案 0 :(得分:3)
您的问题是您遍历已排序的集合并从单词列表中删除。
for(j=i;j<sorted.size();j++){
...
word.remove(j); // and now word is shorter than sorted
}
您可能需要j<word.size()