2015-06-07 2 views
-1

Как считать повторяющиеся элементы в заданном массиве? Пожалуйста, дайте мне какое-либо предложение в качестве альтернативы этой проблеме.Подсчет повторяющихся элементов в заданном массиве

public static void main(String[] args) 
{ 
    // TODO Auto-generated method stub 
    int a[]={1,2,3,1,2,4,4,4,5}; 
    int c=0; 
    for(int i=0;i!='\0';i++) 
    { 
     c=1; 
     for(int k=i+1;k<9;k++) 
     { 
      if(a[i]==a[k] && a[i]!='\0') 
      { 
       c++; 
       // a[k]='\0'; 
      } 
     } 
     if(a[i]!='\0') 
     { 
      System.out.println("value is"+a[i]+"repeated in"+c); 
      System.out.println("\n"); 
     } 
    } 
} 
+0

Вы можете использовать метод array.length вместо I ! = '\ 0' и k <9 => i

+1

Вы не должны писать C на Java. Я имею в виду, что вы должны сделать это java-способом, и, как сказал @DaanMouha, используйте a.length. – hellow

ответ

0

Вот еще один простой метод, который не требует отдельной структуры данных:

  • Сортировка массива с использованием Arrays статический метод
  • Теперь вы можете выполнять итерацию по массиву знающего все дубликаты будут сгруппированы вместе , Не должно быть трудно понять ....
0

расхищения мой код из another answer:

public static void main(String[] args) throws Exception { 
    int[] a = {1, 2, 3, 1, 2, 4, 4, 4, 5}; 
    final Counter<Integer> counter = new Counter<>(); 
    IntStream.of(a).forEach(counter::add); 
    IntStream.rangeClosed(1, 5).forEach(i -> { 
     System.out.printf("%s has a count of %s%n", i, counter.count(i)); 
    }); 
} 

public static class Counter<T> { 
    final Map<T, Integer> counts = new HashMap<>(); 

    public void add(T t) { 
     counts.merge(t, 1, Integer::sum); 
    } 

    public int count(T t) { 
     return counts.getOrDefault(t, 0); 
    } 
} 

Выход:

1 has a count of 2 
2 has a count of 2 
3 has a count of 1 
4 has a count of 3 
5 has a count of 1 
Смежные вопросы