java中的一个小问题

    public static void testzzz(){
        int g=0;
        ArrayList<Character> c=new ArrayList<>();
        String a="aaabbbb";
        char[] b=a.toCharArray();
        for (char d : b) {
        c.add(d);

    }

    for (int i = 0; i < c.size(); i++) {

            if (c.get(i).equals(c.get(i+1))) {  //这个循环会出现下表超出范围的错误
                g++;

            }   

    }



我想问的是能不能再只用for循环的条件下,解决比较这个集合中出现相同元素。每出现一次就g++

小伙子,又是你啊,两层循环来做,第一循环遍历原数组,第二循环判断之前是否有元素跟这个字符相同,相同就跳过,不同就查找重复个数
算了,上代码吧

         int g=0;
        ArrayList<Character> c=new ArrayList<>();
        String a="aaabbbb";
        char[] b=a.toCharArray();
        for (char d : b) {
        c.add(d);
        }
        Map<Character, Integer> m =new HashMap<Character, Integer>();

        for (int i =0;i<c.size();i++){
            char d = c.get(i);

            if(m.containsKey(d)){
                int s= m.get(d);
                s= s+1;
                m.put(d, (s));
            }else{
                m.put(d, 1);
            }
        }
        for (Entry<Character, Integer> entry : m.entrySet()) {  

            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());  

        } 
    }

结果
Key = a, Value = 3
Key = b, Value = 4

for (int i = 0; i < c.size(); i++) {

for (int j= 0; j< c.size(); i++) {
if(i==j){

continue;
}
if (c.get(i).equals(c.get(j))) { //这个循环会出现下表超出范围的错误
g++;

        }   

}

}

最后你的i+1越界了

分解完之后 用map进行存储就好了 map中的key存储字符 value存储统计重复的值

你这样是肯定不行的,在只用for循环的的话,就只能用for循环嵌套了。不过不推荐你这种做法,效率太低。list中有现成的方法,contains(Object object)用此方法即可

楼主:直接上代码
int g = 0;
ArrayList c = new ArrayList();
String a = "aaabbbbb";
char[] b = a.toCharArray();
for (char d : b) {
c.add(d);
}
int size = c.size();
for (int i = 0; i < size; i++) {
Character character = c.get(i);
for (int j = 0; j < i; j++) {
if (character.equals(c.get(j))) {
g++;
System.out.println(i +"-"+character+ ";" + j+"-"+c.get(j));
}
}
}

    System.out.println(g);

因为i的值每次都是新的,需要和i之前的值进行对比,才能保证不会遗漏没有个值
每次比较都是新的,没有重复比较过一次。

你的第二个循环上限为size-1就ok 了

你的第二个循环上限为size-1就ok 了 我以前也是这么干的~~~~看了hashmap 感觉晕呼呼的

public static void testzzz(){
int g=0;
ArrayList c=new ArrayList<>();
String a="aaabbbb";
char[] b=a.toCharArray();
for (char d : b) {
c.add(d);

}

for (int i = 0; i < c.size(); i++) {
        for(int j = i;j<c.size();j++) {
        if (c.get(i).equals(c.get(j))) {  //这个循环会出现下表超出范围的错误
            g++;
        }   
        }
}

public int getNum(List list){
Set set=new HashSet();//用set去重
for (int i = 0,len=list.size(); i < len; i++) {
set.add(list.get(i));
}
System.out.println(set.size());
System.out.println(list.size());
return list.size()-set.size();
}

返回值就是出现了多少个重复的数字,就是g,不过这个只能知道出现了多少个重复的数组,不能确定每个重复了多少次。要知道每个重复了多少次, 就必须逐个对比,也可以用遍历上面的set,set和list有相同就存储2个值,用map键值对。