1

基本上,我正在尝试检查一个数字数组列表与另一个数字数组列表,因为我想查看我的 TempPositionList 中是否有任何内容在我的访问过的单词列表中,但是因为访问过的单词列表可能小于或大于临时列表,我得到堆栈溢出异常。

我该如何解决这个问题?

private void Checker(AdapterView<?> arg0, List<Integer> TempPositionList, boolean checked) {
    if (checked) {
        // its a word
        for (int i = 0; i < TempPositionList.size(); i++) {
            VisitedWords.add(TempPositionList.get(i));
        }

    } else {
        boolean check = false;
        for (int i = 0; i < TempPositionList.size(); i++) {
            for (int j = 0; j < TempPositionList.size(); j++) {
                if (VisitedWords.size() > 0) {
                    if (TempPositionList.get(i).equals(VisitedWords.get(j))) {
                        check = true;
                        break;
                    }
                }
            }
            if (!check) {
                arg0.getChildAt(TempPositionList.get(i)).setBackgroundColor(Color.BLACK);
            }
        }
    }
}
4

3 回答 3

3

我认为这应该做你试图实现的目标:

for (Integer tempInt : TempPositionList) {
    if (!VisitedWords.contains(tempInt)) {
        arg0.getChildAt(tempInt).setBackgroundColor(Color.BLACK);
    }
}

contains()方法使您不必遍历第二个列表,并且foreach在我看来,使用循环更容易阅读,它使您无需明确担心列表的大小。

于 2013-04-19T11:13:37.643 回答
0

如果您使用contains方法检查对象是否在visitedwords 中,也许会更好。这样,您将避免使用两个 for 循环。

于 2013-04-19T11:19:44.747 回答
0

如果您只想要两个列表中共有的元素,您可以这样做。

tempPositionList.retainAll(VisitedWords);

在执行该语句后,tempPositionList 中只会保留公共元素。

于 2013-04-19T11:38:03.090 回答