Zliczanie elementów tablicy - zduplikowane wpisy

0

Podczas pisania "wprawek" natrafiłem ta taki problem, z którym nie wiem jak sobie poradzić.
Założenie jest takie, że program losuje 20 liczb całkowitych z przedziału 1 do 10 i zapisuje je do tablicy. Następnie ma sprawdzić ile każdy z elementów razy wystapił w tablicy (ile razy się powtórzył). Tutaj nie miałem problemu, program to robi. Problem pojawia się przy wypisywaniu wyniku na ekran, ponieważ informacja pojawia się dla każdego z elementów.
Jak wyświetlić wyniki, tak aby każdy powtarzający sie element został wyświetlony tylko 1 raz?
Generalnie dla tablicy: [6, 6, 4, 4, 9, 9, 9, 9, 10, 9, 10, 7, 3, 6, 6, 8, 9, 9, 8, 4] otrzymuję wynik:
Liczba 6 pojawia się razy:4
Liczba 6 pojawia się razy:4
Liczba 4 pojawia się razy:3
Liczba 4 pojawia się razy:3
Liczba 9 pojawia się razy:7
Liczba 9 pojawia się razy:7
Liczba 9 pojawia się razy:7
Liczba 9 pojawia się razy:7
Liczba 10 pojawia się razy:2
Liczba 9 pojawia się razy:7
Liczba 10 pojawia się razy:2
Liczba 7 pojawia się razy:1
Liczba 3 pojawia się razy:1
Liczba 6 pojawia się razy:4
Liczba 6 pojawia się razy:4
Liczba 8 pojawia się razy:2
Liczba 9 pojawia się razy:7
Liczba 9 pojawia się razy:7
Liczba 8 pojawia się razy:2
Liczba 4 pojawia się razy:3

a chciałbym, aby wyglądało to tak:

Liczba 6 pojawia się razy:4
Liczba 4 pojawia się razy:3
Liczba 9 pojawia się razy:7
itd....

Jakieś sugestie?

import java.util.*;

public class Tablice02 {
	public static void main(String[] arg){
		int tablica[] = new int[20];
		Random los = new Random();
		for (int i = 0; i < tablica.length; i++){
			int liczba = los.nextInt(10)+1;
			tablica[i] = liczba;
		}
		System.out.println(Arrays.toString(tablica));
			
	/// Sprawdzanie powtórzeń
		for (int i = 0; i < tablica.length ; i++){
			int suma = 0;
			for (int j = 0; j < tablica.length ; j++){
			if (tablica[i] == tablica[j]) suma++;
			}
			System.out.println("Liczba " + tablica[i] + " pojawia się razy:" + suma);
			}	
	}
}
1

przy zliczaniu powtórzeń, zewnętrzna pętla po trafieniu np. na 6, nie omija kolejnych 6 z tablicy.
mozesz sobie zrobic tablice booleanow gdzie oznaczasz czy zliczyles dana wartość, jeśli tak to następne omijasz.

0

Jestem przekonany, że Twoje rozwiązanie jest o niebo lepsze od mojego, ale może komuś może przyda się też moje w 2 wersjach:

import java.util.*;

public class Tablice02 {
	public static void main(String[] arg){
		int tablica[] = new int[20];
		Random los = new Random();
		for (int i = 0; i < tablica.length; i++){
			int liczba = los.nextInt(10)+1;
			tablica[i] = liczba;
		}
		System.out.println(Arrays.toString(tablica));
			
		/// Sprawdzanie powtórzeń
        for (int i = 0; i < tablica.length ; i++){
            int suma = 0;
            for (int j = 0; j < tablica.length ; j++){
            if (tablica[i] == tablica[j]) suma++;
            }
            System.out.println("Liczba " + tablica[i] + " pojawia się razy:" + suma);
            }  
        
        /// Sprawdzanie powtórzeń 2 wersja
        Arrays.sort(tablica);
        System.out.println(Arrays.toString(tablica));
        for (int i = 1; i <= 10; i++ ){
        	int suma = 0;
        	for (int j = 0; j < tablica.length; j++){
        		if (i == tablica[j]) suma++;
        	}
        	System.out.println("X - Liczba " + i + " pojawia się razy: " + suma);
        	}
        }
	}	

1 użytkowników online, w tym zalogowanych: 0, gości: 1