这是我计算模式的代码
import java.util.Scanner;
public class Mode1
{
public static void main(String args[])
{
Scanner input=new Scanner(System.in);
int temp_counter, counter, num_occured=0, n, i=0, k=0;
counter = 0;
System.out.println("Enter number of data");
n=input.nextInt();
int a[]=new int[n];
System.out.println("Enter the data");
for(i=0; i<a.length; i++)
{
a[i]=input.nextInt();
temp_counter = 0;
for(k=0; k<a.length; k++)
{
if(a[i] == a[k])
{
temp_counter++;
if(counter<temp_counter)
{
counter = temp_counter;
num_occured = a[i];
}
}
}
}
System.out.print(num_occured);
}
}
计算模式是找到最常用的数字
如果用户输入2 2 3 4 5
,则应显示2作为模式
如果用户输入2 2 3 4 4 5
,则应显示2和4作为模式
我的代码只显示第一个最常见的数字。
如果有多个最常用的号码,如何让程序显示多个模式?
答案 0 :(得分:4)
简单的方法:
使用HashMap<Integer, Integer>
。当您从用户中找到新号码时,将输入添加为键,将1添加为值。当您从HashMap中已包含的用户中找到一个数字时,请将该键的值(用户编号)更改为当前值+ 1.
完成输入后,浏览HashMap的元素以查找最大值。 您可以创建一个List来跟踪具有最大值的键,或者只是两次遍历hashmap。
您可能希望稍后清理的代码:
System.out.println("Enter number of data");
n=input.nextInt();
System.out.println("Enter the data");
HashMap<Integer, Integer> numberMap = new HashMap<Integer, Integer>();
int numToAdd = 0;
int highestFreq = 0;
// Count all the numbers
for(int i=0; i<n; i++)
{
numToAdd = input.nextInt();
if (numberMap.containsKey(numToAdd))
numberMap.put(numToAdd, numberMap.get(numToAdd) + 1);
else
numberMap.put(numToAdd, 1);
// Check if highest frequency
if (numberMap.get(numToAdd) > highestFreq)
highestFreq = numberMap.get(numToAdd);
}
for (Integer num: numberMap.keySet())
{
if (numberMap.get(num) == highestFreq)
System.out.print(num + " ");
}
答案 1 :(得分:1)
如果模式是最常出现的值,则需要在经过它们时跟踪每个值的计数。可接受的数据结构是Map,它是键/值对。所以这个例子中的关键是数字,值是这个键被看到的次数。迭代值时,需要检查映射是否存在并增加计数。