2017-09-17 76 views
-1

计算数组元素频率我想找到阵列元件的频率。像:没有重复

输入数组:

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 

我怎样才能得到所需的频率,而不重复数组元素?任何帮助将不胜感激。

+0

想一想,什么是你的独特的价值观,当你迭代达到一个已经计数一次的值时会发生什么......还不知道你如何在每行打印这两个值。 – nullpointer

+1

我想,而不是'X [I]'你应该打印'i' – 3stud1ant3

+0

@ 3stud1ant3为什么呢? – user227666

回答

0

为什么不直接使用地图一样Map<Integer, Integer>并在每次找到值时增加关键的价值?然后你可以遍历地图并打印出它的值。这也可以避免嵌套for循环。

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

+0

你可能要替换'和'地图<整数,整数>地图'' –

+0

我需要做的是不使用的地图。这是棘手的部分。 – user227666

+0

@ArchdukeLiamus忘记仿制药不能使用的原语,感谢 – EthanBar

0

有很多在你code.Instead编译和逻辑错误的,我用下面的代码。

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]); 
      } 
     } 
    } 
} 
+0

获取array'indexOutofBound error in line'fr [value] = fr [value] + 1;' – user227666

+0

这里的问题是int fr [] = new int [x.length];您必须将长度定义为最大元素而不是x.length。 – Gaurav

+0

@ user227666如果不使用地图,则需要一个与您可能需要接受的值范围一样长的数组。要么你必须使自己的'Map'像函数,或者只是做一个愚蠢的长阵列, – EthanBar