为什么临时变量与我从arraylist.get中获得的变量不同?

时间:2019-08-16 18:42:40

标签: java

我正在尝试解决一个问题,我必须找到字符串的第一个非重复字符。我知道我的解决方案很奇怪或效率很低,但是没有意义的是我设置

char temp = check.get(i);

temp中的变量似乎不一样

public static Character firstNonRepeatedCharacter(String str)
{
    ArrayList<Character> check = new ArrayList<Character>();

    for (char c : str.toCharArray()) {
        check.add(c);
    }

    for (int i = 0; i < check.size(); i++) {
        char temp = check.get(i);
        check.remove(check.get(i));

        if (check.contains(temp)) {
            check.removeAll(Collections.singleton(temp));
        } else {
            return temp;
        }
    }

    return null;
}

2 个答案:

答案 0 :(得分:0)

您的问题是,一旦您从ArrayList中删除了某些项目,例如

check.remove(check.get(i));

ArrayList中的所有项目都被“上移”:如果删除索引5处的项目,以前位于索引6处的项目现在位于索引5处。 )索引6,则删除了(原始)索引7的索引。

答案 1 :(得分:0)

^^丹在上面说了什么。您将遇到的另一个错误是,如果您一直没有不重复的字符。

  

check.size()

每次删除重复字符时,

都会保持更新。如果您不能足够快地找到不重复的字符,则索引i将超过check.size()的索引,即使字符串中可能剩下不重复的字符,也退出for循环! 为了解决这个问题,我只需使用while循环即可。