1
resposta

Contando números

a = [1 1 2 1 3 3 3 3 3 4 1 1 1 2 2 2 3 4 4 4]
r = f(a)
r
> [[1,2], [2,1], [1,1], [3,5], [4,1], [1,3], [2,3], [3,1], [4,3]]

Implemente a função f, que recebe sempre lista de inteiros e agrupa elementos sequenciais com sua respectiva contagem. Ele esta pulando e procurando na sequencia inteira. O que pode ser feito?

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");    
    }
}
1 resposta

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!