2017-02-12 13 views
1

В этой очереди я смущен тем, как я могу подсчитать количество уникальных имен. Пример: (Джеймс, Джон, Джеймс, Кен, Дебби, Бен) находятся в массиве, и я предполагаю получить результат из 4 уникальных имен (уникальными именами являются Джон, Кен, Дебби, Бен). Но я не знаю, как подсчитать уникальное имя String в Java.Ищет уникальное количество имен в очереди

import java.util.Queue; 
import java.util.Scanner; 

public static void main(Queue<String> args) { 
    Queue<String> a=new Queue<String>(); 
    int n=0; 
    while(n<5){ 
     System.out.print("Enter name"); 
     a.add(name); 
     n=n+1 
    } 
    System.out.print("the number of unique names are"+ unique.a); 
} 

ответ

0

Используйте некоторую реализацию Set, например. TreeSet где вы можете добавить все товары Queue. Set Структура автоматически подавляет дубликаты.

Queue<String> names = new LinkedList<>(); 
// your code... 
Set<String> uniqueNames = new TreeSet<>(names); 
int numberOfUniqueNames = uniqueNames.size(); 
// do something with count... 
+0

есть какие-либо предложения для вещей, чтобы сделать с uniqueNames (для (имя строки: uniqueNames) {} еще его не очень важно, чтобы изменить его правильно –

+0

вы правы, ибо, каждый цикл не был важен там – matoni

+0

если я не пишу свой код так: «Queue names = new LinkedList ();« в очереди будет некоторая ошибка, которую я не могу решить, и часть, где я делаю »int numberofuniqueNames = uniqueNames.size(); просто «System.out.print» («количество уникальных имен» + «число номеров»); –

1

Как отмечает @matoni, класс Set предотвратит дублирование. Но в отношении вашей спецификации у вас есть дополнительное требование: не уникальное имя не должно учитываться. Этого нельзя достичь только с помощью Set (например, Set будет содержать имя «Джеймс» и поэтому будет учитываться).

Я бы предложил этот небольшой трюк: вы вставляете имена в HashSet (не абстрактная реализация Set) под названием uniqueNames. Если имя уже существует в uniqueNames, вы вставляете их в отдельный HashSet с именем nonUniqueNames. Чтобы подсчитать уникальные имена (в соответствии с вашим определением), вы должны только вычесть размер nonUniqueNames размером uniqueNames.

import java.util.HashSet; 

public class Test { 
    public static void main(String []args){ 
     String[] names = new String[] {"James","John","James","James","Ken","Debbie","Ben"}; 
     HashSet<String> uniqueNames = new HashSet<String>(); 
     HashSet<String> nonUniqueNames = new HashSet<String>(); 
     for (int i=0; i<names.length; i++) { 
      if (!uniqueNames.add(names[i])) { 
       // uniqueNames.add failed because the name already 
       // exists in the HashSet. So insert it in nonUniqueNames: 
       nonUniqueNames.add(names[i]); 
      } 
     } 
     System.out.println(
      "The number of unique names is "+ 
      (uniqueNames.size()-nonUniqueNames.size()) 
     ); 
    } 
}