我想找到数组元素的频率。像:
输入数组:
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 :(得分: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]);
}
}
}
}