查找数组中每个元素的频率

时间:2015-06-20 17:48:32

标签: java

我制作了一个java程序,我只需要在不使用Collections的情况下打印数组中每个元素的频率一次。 下面是我实现它的代码。如何停止计算我刚刚计算的元素 例如4 4.4已发生2次,接下来4次因此不应计算。

static void countdigit(int x[])
 {
   for(int pass=x.length;pass>=0;pass--)
     {
       for(int i=0;i<pass-1;i++)
        {
          if(x[i]<x[i+1])
            {
                int temp=x[i];
                x[i]=x[i+1];
                x[i+1]=temp;
            }
        }
     }

   int count=0;
   int p[]=new int[x.length];
   for(int i=0;i<x.length;i++)
     { System.out.print(x[i]);     @Edit 1
       System.out.print(" ");
     }
    for(int i=0;i<x.length;i++)
     { for(int j=0;j<x.length;j++)
       {
        if(x[i]==x[j])
        {            
          count++;
        }
       }
         System.out.println();
         System.out.println(count);

         count=0;
     }
  } 
  public static void main(String s[])
 {
  countdigit(new int[] {1,4,4,2,3,4,3,3});   
 }
}

OutPutShown
4 4 4 3 3 3 2 1 
3

3

3

3

3

3

1

1

我希望输出为

  4 3, 

  3,3

  2,1

  1,1

4 个答案:

答案 0 :(得分:3)

您可以使用标准的java方法:

void countdigit(Integer[] x) {
    List<Integer> ints = Arrays.asList(x);
    for(int item : x) {
        int frequency = Collections.frequency(ints, item);
        System.out.println(frequency);
    }
}

答案 1 :(得分:2)

为了Java,它是2015年的今天。即使是10年前,它也会是这样的:

import java.util.HashMap;

public class test {

    static void countdigit(int x[]) {
        HashMap<Integer,Integer>digits=new HashMap<Integer,Integer>();
        for (int i : x){
            if (digits.containsKey(i)){
                digits.put(i, digits.get(i)+1);
            } else {
                digits.put(i, 1);
            }
        }
        for (int key:digits.keySet()){
            System.out.println(key+"x"+digits.get(key));
        }
    }

    public static void main(String s[]) {
        countdigit(new int[] { 1, 4, 4, 2, 3, 4, 3, 3 });
    }
}

使用Java 8,流和lambdas,这将是几行代码,我很难将其作为这个问题的答案...

答案 2 :(得分:0)

你应该做一些改变。

首先,在输出原始数字后执行println,将它们与第一个数字分开。

其次,您打印元素的计数与出现的次数相同。在您第一次看到值时打印计数后,您应该跳过这些值,而不计算和打印,直到您得到不同的值。

答案 3 :(得分:0)

为什么不使用新的java 8 stream api:

public class Main
{
    public static void main(String[] args)
    {
        Integer tab[] = {12,45,45,12,1,36,78,12,45,12,45,89,36,45,14,78,12,45};
        HashMap<Integer,Integer> h = Stream.of(tab).collect(
                Collectors.groupingBy(e->e,
                HashMap<Integer,Integer>::new,
                Collectors.summingInt(e->1)
                ));
        System.out.println(h);
    }
}