2016-07-31 10 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())); 
Смежные вопросы