Java:继续获取IndexOutOfBoundsException,无法弄清楚我在哪里使用无效索引

时间:2017-10-02 08:06:29

标签: java arraylist indexoutofboundsexception

很抱歉,如果这是重复的,但我看了很多答案,似乎没有任何答案适用(例如,我开始我的for循环为0,而不是一个常见的错误)。这是一种用于字谜文字游戏的方法。请帮助我,我已经连续五个小时了,我觉得我因睡眠不足而产生幻觉。

编辑:错误发生在第ugh.remove(thing.charAt(i));

public boolean anagramOfLetterSubset(String thing, ArrayList<Character> reference) {
    ArrayList<Character> ugh = new ArrayList<Character>();
    for (int h = 0; h < reference.size(); h++) {
        ugh.add(reference.get(h));
    }

    for (int i = 0; i < thing.length(); i++) { //cycles through the letters in the word
        for (int f = 0; f < reference.size(); f++) { //cycles through the characters in the reference arraylist
            if ((reference.get(f) == thing.charAt(i)) && (reference.indexOf(thing.charAt(i)) != -1)) { //sees if the letter and the character match
                ugh.remove(thing.charAt(i)); //removes first instance of character
            }
        }
    }
    if (ugh == reference)
        return false;  // change the value returned
    else
        return true;
}

1 个答案:

答案 0 :(得分:2)

List有两个remove方法:remove(int),它删除给定索引处的元素;和remove(Object)从列表中查找和删除给定对象。

如果您致电remove(thing.charAt(i)),则参数为charchar不是对象,但可以扩展为整数,因此调用remove(int)。该字符将用于指示列表中的索引(因此例外)。

要改为呼叫remove(Object),请尝试

ugh.remove((Character) thing.charAt(i));