2016-09-08 2 views
0

Я пытаюсь подсчитать количество установленных бит, присутствующих в номере, и упорядочить числа в порядке возрастания в соответствии с к числу установленных битов.Почему мой вывод «4 10 7» вместо «4 3 10 7», когда я пишу следующий код

Мой вход:

1 
4 
3 4 7 10 

Ожидаемый результат:

4 3 10 7 

Мой вывод:

4 10 7 

Почему это пропуск 3 при отображении?

package practice; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.Collection; 
import java.util.HashMap; 
import java.util.TreeMap; 
public class MonkAndTasks { 
    public static void main(String args[]) throws Exception { 

     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     int t = Integer.parseInt(br.readLine()); 
     int k = 0; 

     while (k < t) { 
      long n = Long.parseLong(br.readLine()); 
      String str = br.readLine(); 
      String ar[] = str.split(" "); 
      int i = 0; 
      HashMap<Integer,Long> hm = new HashMap<Integer,Long>(); 
      while (i < n) { 
       Long a = Long.parseLong(ar[i++]); 
       hm.put(count(a), a); 
      } 
      TreeMap<Integer,Long> tm = new TreeMap<Integer,Long>(hm); 
      Collection <Long> c = tm.values(); 
      for (Long e: c) { 
       System.out.print(e + " "); 
      } 
      System.out.println(); 
     } 
    } 

    static int count(Long n) { 
     int c = 0; 
     while (n > 0) { 
      n = n & (n - 1); 
      c++; 
     } 
     return c; 
    } 
} 

Когда я печатаю значение а, чтобы проверить читает ли значение 3 или нет, то получается, что он читает значение 3, но после прохождения значения в HashMap и TreeMap пока не появится нужный выход.

+0

Возможный дубликат (HTTP : //stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help-me-diagnose-problems) – Raedwald

ответ

2

Вы ставите 4 номера (4 3 10 7) в качестве значений в TreeMap, где ключ, кажется, число 1 бит (я думаю, что это то, что static int count(Long n) делает). 3 и 10 оба имеют 2 1 бит (11 и 1010 соответственно), так 10 заменяет 3 в Map (поскольку Map не допускает дубликаты ключей), и 3 никогда не выход.

В основном, следующий цикл

while(i<n) 
{ 
    Long a=Long.parseLong(ar[i++]); 
    hm.put(count(a),a); 
} 

вставляет следующие записи TreeMap: [? Что такое отладчик и как это может помочь мне диагностировать проблемы]

hm.put(1,4); 
hm.put(2,3); 
hm.put(2,10); // this entry has the same key as the previous entry and therefore 
       // replaces it 
hm.put(3,7); 
+0

Итак, как я могу хранить n значений, имеющих одинаковые ключи? –

+0

@MihirMehta Вы можете использовать 'TreeMap >'. – Eran

+0

Спасибо за помощь @Eran –

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