从ArrayList中删除对象后的ArrayList IndexOutOBoundsException

时间:2013-08-01 14:15:25

标签: java list arraylist

我试图在给定的输入句子中找到单词的字谜。这是我在运行程序时得到的例外。是不是因为列表大小的变化?请帮我解决问题。

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);
                }   

            }


        }

    }

}

1 个答案:

答案 0 :(得分:3)

您的问题是您遍历已排序的集合并从单词列表中删除。

for(j=i;j<sorted.size();j++){
   ... 
   word.remove(j); // and now word is shorter than sorted
}

您可能需要j<word.size()