2016-07-31 65 views
1

我做了一个int []数组,它将按用户输入的分数填充。我的任务是创建一个频率表,用于统计用户输入某个分数的次数。 示例:用户输入了以下分数13,13,13,16,16,19,22。然后,以表格形式13 - 3,16 - 2,19 - 1,22 - 1对不起不好英语如何创建频率表(整数数组)

回答

0

你可以这样做:

Map<Integer, Integer> numberCountMap = .... 
for (int i=0; i<numbers.length; i++) { 
    numberCountMap.compute(numbers[i], (key, value) -> value == null ? 1 : value + 1); 
} 
//print map or sort by value if you need most frequent one to be on top 
+0

谢谢先生!我忘了提及我已经使用冒泡排序按升序排序。不幸的是,我们不允许使用那个“numberCountMap ...”的东西。我们只是基础。 –

0

这将做的工作

import java.util.HashSet; 
import java.util.Set; 
public class NumbersInArray { 
    public static void main(String[] args) { 
     int [] arr = {1,2,1,1,5,5,5,3,4,5,6}; 
     Set<Integer> set = new HashSet(); 

     //adding numbers to set will remove duplicates 
     for(int i =0 ; i<arr.length;i++) { 
      set.add(arr[i]); 
     } 
     int counter = 0; 
     int[] arrayToCheck = set.stream().mapToInt(Number::intValue).toArray(); 
     for(int i = 0; i<set.size(); i++) { 
      counter = 0; 
      for(int j =0; j<arr.length;j++) { 
       if(arrayToCheck[i]== arr[j]) { 
        counter++; 
       } 
      } 
      System.out.println(arrayToCheck[i] + "-" + counter); 
     } 
    } 
} 
0

在Java 8,你可以做到这一点

Map<Integer, Long> freq = Arrays.stream(array).boxed(). 
       collect(Collectors.groupingBy(Integer::intValue, Collectors.counting()));