2015-09-30 2 views
-1

Я пытаюсь напечатать, сколько раз определенный ключ произошел в массиве, и кажется, что он печатает один для всех значений. Может кто-нибудь пожалуйста, скажите мне, что логическая ошибка, я имею в коде ниже:Не печатайте вхождения каждого ключа правильно с помощью HashMap

import java.util.HashMap; 
import java.util.Map; 

public class MostOccuranceOfNumber { 

    public static void main(String[] args) { 


     int[] n = {1,2,3,4,5,6,7,7,7,7}; 

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

     // Create Hash Map 

     for(int i = 0 ; i < n.length ; i++){ 


      if(map.containsKey(n)){ 

       map.put(n[i], map.get(n[i]) +1); 

      } 
      else{ 

       map.put(n[i], 1); 
      } 

      for(Map.Entry<Integer, Integer> m : map.entrySet()){ 

       System.out.println("Key "+m.getKey()+"Occured"+m.getValue()+"times"); 

      } 


     } 

    } 

} 
+1

Почему вы гнездятся один цикл внутри другого? –

+0

Вы выполняете итерацию по каждому элементу, что означает одну итерацию для каждого появления '7', поэтому он будет распечатывать счет каждый раз. Вы хотите получить набор, содержащий только уникальные значения, а затем перебирать этот набор, консультируясь с исходным набором для подсчетов. – Eraph

+0

О, Вложение одной петли в другую - это логическая ошибка, которую я не понимал, но вставка ее за цикл for снова печатает значения каждого ключа как только 1 – John

ответ

1

Попробуйте это:

import java.util.HashMap; 
import java.util.Map; 

public class MostOccuranceOfNumber { 

public static void main(String[] args) { 


    int[] n = {1,2,3,4,5,6,7,7,7,7}; 

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

    // Create Hash Map 

    for(int i = 0 ; i < n.length ; i++){ 


     if(map.containsKey(n[i])){//you made mistake here 

      map.put(n[i], map.get(n[i]) +1); 

     } 
     else{ 

      map.put(n[i], 1); 
     } 



    } 

    } 
for(Map.Entry<Integer, Integer> m : map.entrySet()){ 

      System.out.println("Key "+m.getKey()+"Occured "+m.getValue()+" times ");//Sorry forgot to take it outside 


} 

} 
+0

У вас есть второй цикл 'for' внутри первого. –

+0

Я переместил его и теперь он работает нормально. – John

Смежные вопросы