Vamos la
Existe uma forma pratica e uma forma com poucos recursos de fazer isso
a forma pratica é criar um Map<Integer,Integer>
onde a chave é o numero e o valor sera a quantidade de repetições. se vc sabe usar essas estruturas de dados é um prato cheio.
a forma com poucos recursos tem duas formas de faze-lo:
a primeira é estabelecer um intervalo pequeno de numeros ( exemplo de 0 a 9 ) e ai vc usa o numero como indice e o valor como quantidade.
for(int =0; i< array_com_numeros_repetidos.length ; i++ ) {
numero = array_com_numeros_repetidos[i];
array_com_numeros_e_quantidade_repeticao[ numero ] ++;
}
agora se vc pode ser numero inteiro vc nao tera memoria suficiente. ate Short positivo vai, que é Short.MAX_VALUE ( short é um inteiro menor ).
a segunda abordagem é vc criar uma estrutura desse tipo
public class No {
private No proximo;
private int valor;
private int quantidade;
public No (int valor) {
this.valor = valor;
this.quantidade =1;
this.proximo = null;
}
public void incrementaQuantidade { this.quantidade++; }
public int getQuantidade() { return this.quantidade; }
/* getValor e getProximo */
public No procura( int valor ) {
if ( this.valor == valor ) {
return this;
}
if ( proximo != null ){
return proximo.procura( valor ); // recursao
}
return null;
}
public void adicionaAoFim( int valor ) {
if ( proximo == null ) {
proximo = new No( valor );
} else {
proximo.adicionaAoFim( valor ); // recursao
}
}
}
como vc pode ver isso é uma lista encadeada. vc cria o primeiro elemento TOPO com o valor do elemento 0 do array e itera sobre os proximos elementos do array.
vc encontrou? entao vc incrementaQuantidade. nao encontrou? adiciona no fim. Se vc pode usar um List entao vc pode usar um Map e tudo isso é desnecessario.
no final vc tem uma lista com elementos unicos e as quantidades.
uma ultima forma:
se vc puder ORDENAR o array, fica trivial pois se vc tem algo como
int [] array = { 1, 2, 2, 2, 3, 3 };
vc so precisa fazer um loop e saber se o elemento atual é diferente do anterior.
int anterior = array[0];
int quantidade = 1;
for(int i= 1;i< array.length; i++ ){
int atual = array[i];
if ( atual == anterior ) {
quantidade++;
} else {
System.out.println("o valor " + anterior + " aparece " + quantidade + " vezes ");
quantidade = 1; /* pra ser usado na proxima vez*/
}
anterior = atual; /* guarda atual*/
}
desse jeito vc só imprime. e ordenar um array pode não ser pratico no seu nivel de aprendizado, vai saber.
divirta-se