Oi, Cristiano!
Bom, eu peguei seu código para testar aqui e ver o que acontecia e tive que fazer algumas correções para funcionar, ficou assim:
public class MainApplication {
public static void main(String[] args) {
int[] vetor = { 1, 1, 2, 1, 3, 3, 3, 3, 3, 4, 1, 1, 1, 2, 2, 2, 3, 4, 4, 4 };
System.out.print("\n Frequencia dos numeros \n");
int cont = 1;
int num = 0;
for (int i = 0; i < vetor.length; i++) {
cont = 0;
for (int j = 0; j < vetor.length; j++) {
if (vetor[i] == vetor[j]) {
cont++;
num = vetor[i];
}
System.out.println(" repeticoes numero " + num + ": " + cont + " vezes");
}
}
}
}
Realmente, ele está percorrendo um por um e exibindo em lista. O problema é que você está pensando em fazer um por um. Além do seu código estar com um loop dentro do outro desnecessariamente, isso é um problema em termos de desempenho da aplicação. O código abaixo faz o que você quer e está comentado:
public class MainApplication {
public static void main(String[] args) {
// Iniciando o vetor
int[] vetor = { 1, 1, 2, 1, 3, 3, 3, 3, 3, 4, 1, 1, 1, 2, 2, 2, 3, 4, 4, 4 };
// Imprimindo mensagem
System.out.println("Frequencia dos numeros \n");
System.out.print("> [");
// Variaveis de contador e numero atual ja considerando a primeira posicao do vetor
int contador = 1;
int numeroAtual = vetor[0];
// Atencao que o for comeca da segunda posicao do vetor (indice 1), pois o primeiro
// ja declaramos ai em cima
for (int i = 1; i < vetor.length; i++) {
if (numeroAtual == vetor[i]) { // Se o numero atual for igual a posicao atual, incrementamos a contagem
contador++;
} else { // Se nao, imprimimos a contagem total e atualizamos o numero atual e o contador
System.out.print("[" + numeroAtual + "," + contador + "], ");
numeroAtual = vetor[i];
contador = 1;
}
}
// No final do for, o ultimo numero sera ignorado, pois saira do loop.
// Aqui imprimimos ele e termina o programa
System.out.print("[" + numeroAtual + "," + contador + "]] ");
}
}
Qualquer dúvida é só perguntar!