2013-04-17 2 views
0
public class nrlSports { 
    public static void main(String[] args){ 
     String[] direction = {"north", "north", "east", "south", "south", "south", "north", "north"}; 

     for(int i=0; i<direction.length; i++) { 
      int count = 0; 
      for(int j = 0; j < direction.length; j++) 
       if(direction[i].equals(direction[j])) { 
        count++; 
       } 
      System.out.println(direction[i] + " (" + count + ")"); 
     } 
    } 
} 

Выход: север (4) север (4) восток (1) юг (3) юг (3) юг (3) север (4) север (4)Как удалить повторяющиеся значения, а затем отобразить уникальные значения?

Как удалить эти повторяющиеся значения, так что результат должен выглядеть следующим образом: север (4) восток (1) юг (3)

+0

Добавить все элементы массива в [Set] (http://docs.oracle.com/javase/6/docs/api /java/util/HashSet.html). – Henrik

+0

Будет ли массив отсортирован всегда? – NINCOMPOOP

ответ

0

Как об этом подходе

String[] direction = { "north", "north", "east", "south", "south", 
     "south", "north", "north" }; 

Map<String, Integer> map = new LinkedHashMap<>();//to preserve order or elements 
for (String key : direction) { 
    if (map.containsKey(key)) 
     map.put(key, map.get(key) + 1); 
    else 
     map.put(key, 1); 
} 
for (Map.Entry<String, Integer> entry : map.entrySet()) 
     System.out.println(entry.getKey() + "(" + entry.getValue() + ")"+ 
       String.format("%"+entry.getValue()+"s", "").replace(' ', '*')); 

выход

north(4)**** 
east(1)* 
south(3)*** 
+0

да это прекрасный. как вы добавляете звезду *, например север (4): **** восток (1): * юг (3): *** – Shuvo0o

+0

отличное спасибо. одна вещь, которую я не понимаю, это «\ u0000». что это делает? – Shuvo0o

+0

@ Shuvo0o Я изменил код и больше не использовал '\ u0000'. По умолчанию пустой массив char заполняется '\ u0000', который является первым символом Юникода, поэтому вся строка также содержит только их. Теперь я использую 'String.format ("% "+ entry.getValue() +" s "," ")'. Если вы используете его как 'String.format («% 5s »,« »), он будет вызывать строку, содержащую ровно 5 пробелов' '' '. Позже я заменяю каждое пространство '*'. – Pshemo

0

Используйте набор. Добавьте их в набор, и вы получите уникальные значения.

EDIT: Я пропустил счет часть. Добавление сейчас

String[] direction = {"north", "north", "east", "south", 
          "south", "south", "north", "north"}; 

    Map<String,int> m = new HashMap<String,int>(); 

for(String str:direction){ 
    if(m.contains(str)) 
     m.put(key,m.get(str)+1); 
    else 
     m.put(key,1); 
} 


//key is all values you want to add and count in no. of times values is repeated. 

Так что, если вы хотите, чтобы все уникальные значения, вы можете перебрать набор ключей и получить соответствующее количество от карты.

+0

Как насчет счета? – NINCOMPOOP

+0

@Noob: отредактировал мое решение, чтобы добавить счетную часть. – Lokesh

0

Мой возможный простой способ

Set<String> directionS= new HashSet<String>(Arrays.asList(direction)); 

, а затем играть с directionS

1

Это может помочь:

public static void main(String[] args){ 
    String[] direction = {"north", "north", "east", "south", 
          "south", "south", "north", "north"}; 
    Map<String, Integer> countMap = new HashMap<String, Integer>(); 

    for(int i=0; i<direction.length; i++) { 
     String key = direction[i]; 
     if(!countMap.containsKey(key)){ 
      countMap.put(key, 1); 
     } 
     else 
     { 
      countMap.put(key, countMap.get(key)+1); 
     } 
    } 
    System.out.println(countMap); 
} 
1

думает, что решение не оптимизирован один, но будет работать (подтверждено, запустив это:))

 String[] direction = {"north", "north", "east", "south", "south", "south", "north", "north"}; 
    HashMap<String,Integer> myHash = new HashMap<String, Integer>(); 


    for(int i=0; i<direction.length; i++) { 
     int count = 0; 
     for(int j = 0; j < direction.length ; j++) 
      if(direction[i].equals(direction[j])) { 
       count++; 
       myHash.put(direction[i], new Integer(count));      
      } 
    } 

     Iterator T = (Iterator) myHash.entrySet().iterator(); 
     while(T.hasNext()) 
     { 
      Map.Entry newEntery = (Map.Entry) T.next();     
      System.out.print(newEntery.getKey() +"("+ newEntery.getValue()+")"); 
     } 
+1

@ Shuvo0o действительно проверить это чувак –