我是 Java 新手,我在周末项目中遇到了一个需要解决的问题。我遇到了一些麻烦,希望得到你的帮助。请理解我是初学者。如果我有什么地方说错了,请向我解释。我希望有一天也能成为一名优秀的程序员。
我进行了彻底的搜索,并找到了诸如“热图”或“数组列表”之类的答案,这些东西我可能不会被允许使用,因为我还没有学会它。
好的,所以给我的问题是:
Find: 1) Mode, the most frequently occurring marks in the class. If 2 or more marks occur equally frequently, then the highest of these marks is the mode.
2) Mode Frequency: Frequency of mode.
It is assumed that the class has 10 students and marks are between 0 to 100.You are not allowed to sort the marks.
这是我查找模式的代码:
void mode()
{
int c[]=new int[10];
int arr[]=new int[10];
for (int i=0;i<10;i++)
{
for (int j=i+1;j<10;j++)
{
for (int k=0;k<10;k++)
{
if (marks[i]!=arr[k])
{
if (marks[i]==marks[j])
{
c[i]++;
break;
}
}
}
arr[i]=marks[i];
}
}
for (int k=0;k<10;k++)
{
System.out.println();
System.out.println(c[k]);
}
}
其中marks[]是我输入的int数组,c[]是统计该数字出现的次数,arr[]是一个数组,用于交叉检查该数字之前是否出现过。
假设输入的 10 个数字是 99, 95, 97, 92, 80, 95, 73, 80, 95, 80。可以看到 95 和 80 出现了 3 次。
所以我的 c[] 应该有 {0, 2, 0, 0, 2, 0, 0, 0, 0, 0},但是当我运行它时,它变成了 {0, 2, 0, 0, 2, 1, 0, 1, 0, 0},这意味着我的程序没有与 arr[] 进行交叉检查。
我认为我使用了三个 for 循环,搞得一团糟。我似乎不知道如何解决它。
最佳答案
一种解决方案是将长度为 101 的数组初始化为零。该数组表示特定标记出现的次数。每次遇到特定标记时,都会增加计数。然后要找到模式,您只需找到计数最高的索引即可。
关于java - Java中无需排序即可查找众数和众数频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24842585/