2016-11-10 65 views
0

我想计算Java数组中每个数的出现次数(如1 =?,2 =?,3 =?)。我的数组如何存储超过10个值?计算数组java中的出现次数

int [] arryNum = new int[]{4,4,4,3,4,5,4,3,4,4,4,5,4,5,5,5,4,3,2,15,4,3,4,6,4,3,4,5,4,2,4,5,4,3,2,5,4,3,5,4,0,4,3,4,5,4,3,0,4,5,4,3,5,4,2,3,2,3,4}; 
    int[] counter = new int[] { 0, 0, 0, 0, 0,0 }; 
    for (int i = 0; i < arryNum.length; i++) { 
     counter[arryNum[i] ]++; 
    } 

    for (int i = 0; i < counter.length; i++){ 
     System.out.println((i + 1) + ":" + counter[i]); 
    } 
+0

使用“Map ”键,其中键为数字,值为频率/计数器。 – Thomas

+0

erm ... sry @Thomas我在java中很新,我可以知道如何根据我的问题使用Map 来存储我的值吗? –

+0

查看[Map Interface](https://docs.oracle.com/javase/7/docs/api/java/util/Map.html)。 Map本身就是一个接口,所以你不能直接创建它的一个实例,但是你可以创建一个子类的实例; IE:Map map = new HashMap ();'。从那里,你可以使用'put(K,V)','get(K)'和'containsKey(K)'方法去做你想做的事情。 – Ironcache

回答

1
public static void main(String[] args){ 
    int[] arryNum = new int[] { 4, 4, 4, 3, 4, 5, 4, 3, 4, 4, 4, 5, 4, 5, 5, 5, 4, 3, 2, 15, 4, 
      3, 4, 6, 4, 3, 4, 5, 4, 2, 4, 5, 4, 3, 2, 5, 4, 3, 5, 4, 0, 4, 3, 4, 5, 4, 3, 0, 4, 
      5, 4, 3, 5, 4, 2, 3, 2, 3, 4 }; 
    Map<Integer, Integer> lookup = new HashMap<>(); 
    for (int key : arryNum) { 
     if(lookup.containsKey(key)) { 
      lookup.put(key, lookup.get(key) + 1); 
     } else { 
      lookup.put(key, 1); 
     } 
    } 

    for (Integer keys : lookup.keySet()) { 
     System.out.println(keys + " Found " + lookup.get(keys) + " Times"); 
    } 

} 
+0

我实际上是想贬低你的答案,因为你没有一个单一的解释线......但是。每个人都开始......但请记住:**好**的答案不仅仅是放弃一些工作代码! – GhostCat

1

你可以不喜欢这样。

首先你需要的地图来算你的东西:

Map<Integer, Integer> countsByNumbers = new HashMap<>(); 

然后你遍历你的号码;最好用的for-each:

for (int number : arryNum) { 
    if (countsByNumbers.containsKey(number)) { 
    int newCount = countsByNumbers.get(number) +1; 
    countsByNumbers.put(number, newCount); 
    } else { 
    countsByNumbers.put(number, 1); 
    } 

一些注意事项:

  1. 要知道,地图,因为任何类型的Java集合类的只有参考类型的交易;因此它被声明为使用Integer,而不是原始类型int
  2. 编译器做了一些魔法把从你的阵列INT值到整数对象的掩护下
  3. 注意Map是一个接口,但我们必须实例化一个具体的类,在此情况下,我们简单地使用的HashMap
+0

好的解决方案,但是你应该使用containsKey(),contains()对于Map不存在。 – user6904265

+0

谢谢......修正了它! – GhostCat

1

您可以将其与Java 8流写在一个更succint方式:

Map<Integer,Integer> map = new HashMap<Integer,Integer>(); 
Arrays.stream(arryNum).forEach(x -> map.put(x , map.computeIfAbsent(x, s -> 0) + 1)); 
System.out.println(map); 
+0

提示:对于初学者...流很可能矫枉过正。 – GhostCat

+0

是的,对于初学者来说,你的解决方案更合适。 – user6904265