如何在数组中显示数字的出现?

时间:2013-08-29 03:17:10

标签: java arrays collections frequency

您好我想在int []数组中显示数字的出现次数。我发现许多人试图提出类似的问题,但他们的数组是String。这是我的工作从10-25中挑选10个随机数并打印100次,显示数字的出现次数。例如:

12 15 16 17 20 14 24 21 22 15 10 12 16 24 23 14 23 12 11 10

10的频率是:2 频率为11:1 频率为12:3 等等

public void pickRandomNo(int[] a) {
        printHeader();
        Random randomGenerator = new Random();
        for (int row = 0; row < 9; row++) {
            for (int i = 0; i < 10; i++) {
            array[i] = 10 + randomGenerator.nextInt((25 - 10) + 1);
            System.out.print(array[i] + " ");
        } System.out.println("");
      }      
    }

 public void displayOccurences() {
        ArrayList arrlist = new ArrayList();       
        arrlist.add(array);
        int freq = Collections.frequency(arrlist, 10);
        System.out.println("Frequency of 10 is: " + freq);      
    }

3 个答案:

答案 0 :(得分:3)

嗯,对于你可以做的displayOccurences方法:

int freq = Collections.frequency(Arrays.asList(array), 10);

或者你可以用老式的方式进行迭代:

int freq = 0;
for(final int v : array)
    if(v == 10)
        freq++;

或者如果你使用的是Java 8,你可以试试这样的东西:

int freq = Arrays.asList(array).stream().filter(i -> i.equals(10) || i == 10).count();

答案 1 :(得分:0)

基于Guava MultiSet的解决方案:

    HashMultiset<Integer> ms = HashMultiset.create();
    for(int i : a) {
        ms.add(i);
    }
    for(Entry<Integer> e : ms.entrySet()) {
        System.out.println(e.getElement() + " - " + e.getCount());
    }

答案 2 :(得分:0)

您希望确定计算数组的整个范围。我有一个类似的问题,我在一个非常大的ArrayList中显示每个温度的所有出现我使用这个静态方法来显示一个表。

public static void displayOccurances(ArrayList<Integer> tempsList){
    //  get min and max for looping
    int i = Collections.min(tempsList);
    int maxTemp = Collections.max(tempsList);

    // Table Headings
    System.out.println("Frequency of each teperature");
    System.out.printf("%4s%9s%n", "TEMP", "COUNT");
    System.out.printf("%4s%9s%n", "====", "=====");

    // Loop through arraylist to display occurrences
    while (i <= maxTemp) {
        System.out.printf("%4s%9s%n", i, Collections.frequency(tempsList, i));
        i++;
    }
}

我会在这里为你重构一个通用数组。

public static void displayOccurances(Integer[] array){
    //  get min and max for looping
    int i = Collections.min(array);
    int maxInt = Collections.max(array);

    // Table Headings
    System.out.println("Frequency of each Integer");
    System.out.printf("%3s%9s%n", "INT", "COUNT");
    System.out.printf("%3s%9s%n", "===", "=====");

    // Loop through array to display occurrences
    while (i <= maxInt) {
        System.out.printf("%3s%9s%n", i, Collections.frequency(array, i));
        i++;
    }
}

这是我的第一个答案,很抱歉,如果我的代码没有正确显示。

我们的想法是使用Java Collections Class(您需要导入)来识别出现最高和最低出现次数。从低范围开始,再次使用Collections Class检查出现次数范围内的每个整数。

如果你不想显示0次出现,只需在循环内放一个if,就像这样

// Loop through arraylist to display occurances
    while (i <= maxTemp) {
        if (Collections.frequency(tempsList, i) > 0){
            System.out.printf("%4s%9s%n", i, Collections.frequency(tempsList, i));                
        }
        i++;
    }