java:找到多种模式

时间:2011-12-02 21:59:22

标签: java mode

这是我计算模式的代码

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作为模式

我的代码只显示第一个最常见的数字。

如果有多个最常用的号码,如何让程序显示多个模式?

2 个答案:

答案 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,它是键/值对。所以这个例子中的关键是数字,值是这个键被看到的次数。迭代值时,需要检查映射是否存在并增加计数。