计算数组元素频率而不重复

时间:2017-09-17 05:02:15

标签: java arrays

我想找到数组元素的频率。像:

输入数组:

1,2,3,4,2,3,4,5,8

预期输出(数字频率):

1 1
2 2
3 2
4 2
5 1
8 1

我的Java代码是:

class Fre 
{ 
 public static void main(String ar[]) 
 {
  frequencycount(new int[]{1,2,3,3,2,1,1,1,5,6,5,8,9,6}); 
 }


 static void frequencycount(int x[])
 {
  int i=0; 
  int j=0; 
  int fr[]=new int[x.length];
   for(i=0;i<fr.length;i++) { 
     fr[i]=0;
    }

    /////calculating frequency
    for(i=0;i<digit.length;i++) { 
       for(j=0;j<digit.length;j++) { 
          if(x[i]==x[j]) {
            fr[i]++; 
          }
        }
      } 

  for(i=0;i<fr.length;i++) { 
      System.out.println(x[i]+" "+fr[i]);
    } 
  }
 }//class

输出问题是重复数组元素。像:

digit frequency:


1 1
2 2
3 2
4 2
2 2
3 2
4 2
7 1
8 1

如何在不重复数组元素的情况下获得所需的频率?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

为什么不使用像Map<Integer, Integer>之类的地图,每次找到值时都会增加密钥的值?然后,您可以遍历地图并打印出它的值。这也使您免于嵌套for循环。

Here's a tutorial让您开始使用Map

答案 1 :(得分:0)

您的代码中存在大量编译和逻辑错误。相反,我使用下面的代码。

class Fre {
    public static void main(String ar[]) {
        frequencycount(new int[]{1, 2, 3, 3, 2, 1, 1, 1, 5, 6, 5, 8, 9, 6});
    }


    static void frequencycount(int x[]) {

        int fr[] = new int[maxElement(x)];
        /* default value of all elements is 0 no need to run this code
        for (i = 0; i < fr.length; i++) {
            fr[i] = 0;
        }*/


        for (int k = 0; k < x.length; k++) {
            //update index with count
            int value = x[k];
            fr[value] = fr[value] + 1;
        }

        for (int k = 0; k < fr.length; k++) {
            if (fr[k] != 0) {
                System.out.println(k+" " + fr[k]);
            }
        }
    }
}