题目是有一个数组a,比如int [] a = {1,2,3,1,1,2,1,2,3,4},要求把出现了哪些元素,分别出现了几次,就是目的想得到这样的输出     
1:4
2:3
3:2
4:1我的想法是这样的创建另外2个数组b和count,如果a中第一次出现了某个数,则放到b中去,比如放到了b[0],然后count[0]=1,如果以后再次出现此数,则count[0]++   ,如果又出现了新数,则放到b[1],然后计数count[1]=1,.......下面是我写的错误的代码,可是不知道错在哪里了
public class FindElements { static int n = 0;
public static void main(String[] args) {
int [] a = {1,2,3,1,1,2,1,2,3,4};
FindElements fe = new FindElements();
fe.getInfo(a);
}



public static boolean isIn(int a,int[] b){
for(int i=0 ; i<b.length ; i++){
if(a == b[i]){
n = i;
return true;
}
}
return false;
}


public void getInfo(int[] a){
int [] b = new int [a.length];
int [] count = new int [a.length];
int x = 0;
for(int i=0 ; i<a.length ; i++){
if(isIn(a[i],b)){
count[n]++;
}
else{
a[i] = b[x];
//System.out.print(b[x]);
count[x] = 1;
x++;
}
} printInfo(b,count);
}

public static void printInfo(int[] b,int [] count){
for(int i=0 ; i<b.length ; i++){
System.out.println(b[i] + ":" + count[i]);
}
}}输出结果为
0:1
0:1
0:1
0:1
0:1
0:1
0:1
0:1
0:1
0:1

解决方案 »

  1.   

    public void getInfo(int[] a){
            int [] b = new int [a.length];
            int [] count = new int [a.length];
            int x = 0;
            for(int i=0 ; i<a.length ; i++){
                if(isIn(a[i],b)){
                    count[n]++;
                }
                else{
                    a[i] = b[x];                //System.out.print(b[x]);//应该是b[x]= a[i]
                    count[x] = 1;
                    x++;
                }
            }
      

  2.   

    改下这个方法
    public static void printInfo(int[] b,int [] count){
            for(int i=0 ; i<b.length ; i++){
                if(count[i]>0)
                System.out.println(b[i] + ":" + count[i]);
            }
        }
      

  3.   

    恩 谢谢  我刚也改下 printInfo方法 
    public static void printInfo(int[] b,int [] count){
    for(int i=0 ; i<b.length ; i++){
    if(count[i]==0)break;
    System.out.println(b[i] + ":" + count[i]);
    }
    }谢谢您!受教了!
      

  4.   

    else{
                    b[x] = a[i];
                    //System.out.print(b[x]);
                    count[x] += 1;
                    x++;
                }
    查下n的值
      

  5.   


    可以采用map解决这个问题 
        Map<Integer,Integer> m =
          new HashMap<Integer,Integer>();
        for(int i = 0; i < a.length; i++) {
               Integer freq = m.get(a[i]);
          m.put(r, freq == null ? 1 : freq + 1);
        }
    你的问题估计出在这里:
     a[i] = b[x];
    你是想把a[i]的值赋给b[x]吧, 改写成这样b[x]= a[i];