1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problema Java

Discussão em 'Programação' iniciada por AVG, 9 de Novembro de 2008. (Respostas: 8; Visualizações: 734)

  1. AVG

    AVG

    Código:
    public class RandomArrayInt {
     
        public static void main (String [] args){
     
            int N = Integer.parseInt(args[0]);
     
            int [] a = new int [N];
            int [] b = new int [N];
     
            for (int i=0; i < N; i++){
                for (int j=0; i < b.length; i++){
     
                    a[i] = (int) (Math.random()*20);
     
                    j=a[i];
     
                    if (a[i] == j)
                        b[j]++;
     
                    //Para ficar bonito
                    if (j<10)
                        System.out.println(a[i] + " " + b[j]);
                    else
                        System.out.println(a[i] + " " + b[j]);
     
     
                }
            }    
     
        }
    }
    
    Fiz este programa para preencher com inteiros aleatorios de 0 a 20 e que conta a frequência de cada valor entre 0 e 20.

    A duvida é como elimino os campos repetidos?

    Ex: no output sai
    Código:
    3 1
    4 1
    3 2
    3 3
    0 1
    
    e queria:
    Código:
    4 1
    3 3
    0 1
    
    Outra duvida é como passar os inteiros para asterisco de modo a ter:

    Código:
    4 *
    3 ***
    0 *
    
    Obrigado por qualquer ajuda
     
    Última edição pelo moderador: 10 de Novembro de 2008
  2. arkannis

    arkannis Power Member

    Não usas um ciclo dentro de outro e imprimes tudo no fim.
    Uma das hipoteses é criares um vector 'b' com tamanho 21, e depois é so incrementares a posicao do numero que calha.
    Tipo:
    Código:
    int rand = (int) (Math.random()*20);
    a[i] = rand;
    b[rand]++;
    
    Assim no vector b vais ter a frequencia de cada numero que calhou, por exemplo, o valor de b[10] é as vezes que calhou o numero 10.
     
    Última edição pelo moderador: 10 de Novembro de 2008
  3. AVG

    AVG

    E em relação às duvidas que coloquei, podes ajudar?

    Abraço
     
  4. arkannis

    arkannis Power Member

    Eu ajudei, tu é que não percebeste LOL.
    Se tu fizeres da maneira q eu disse, é muito simples imprimires da maneira que tu queres ou mesmo com os asteriscos.
    É so percorreres o vector b dos resultados e fazer:
    Código:
    if( b[i] > 0)
    System.out.println(i + " " + b[i]);
     
  5. nsilvio

    nsilvio Power Member

    O melhor é utilizar uma hashtable. Esta impede a utilização de números repetidos!
    Deixo aqui algo parecido com pseudocódigo:


    Código:
    Hash $numeros
     
    // Define a frequência a '0'
    para cada $num em [0..20]
    [INDENT]$numeros[$num] = 0
    [/INDENT]// Numero total de numeros a juntar à frequência
    $total = args[0]
     
     
    // Calcula a frequência
    para cada $num ate $total
    [INDENT]$random = random()
    [/INDENT][INDENT]$numeros[$random] = $numeros[$random] + 1
    [/INDENT]//Imprime
    para cada $key em $numeros
    [INDENT]$value = $numeros[$key]
    [/INDENT][INDENT]imprime "Valor: " + $key + " Frequência: "
    [/INDENT][INDENT]de 0 ate $value
    [/INDENT][INDENT][INDENT]imprime "*"
     
    [/INDENT][/INDENT]
     
    Última edição pelo moderador: 10 de Novembro de 2008
  6. PrOdG

    PrOdG Power Member

    A única parte da tua solução que tem alguma coisa a ver com uma hashtable é o uso da palavra 'Hash' no início.
    Esclarecido este ponto, se trocares 'Hash' por 'int[]', deste a solução correcta.
     
  7. nsilvio

    nsilvio Power Member


    Humm... se pensarmos que a variavel que utiliza a "hashtable" é utilizada no codigo todo... então diria que todo o codigo tem a ver com a "hashtable"!

    E não dei a solução correcta... dei apenas uma possivel solução! (existem outras... basta ter imaginação)
    ... tal como utilizar um array de int's

    Para aprender, prefiro utilizar "java.util.Hashtable" ou "java.util.Map"! Isto para me ambientar às classes presentes na API do java
    Para performance, prefiro utilizar um array de "int"
     
  8. PrOdG

    PrOdG Power Member

    O que eu disse é que apesar de teres apresentado a variável como uma hashtable estás a utilizá-la como um array de inteiros no resto do pseudo-código.
     
  9. nsilvio

    nsilvio Power Member

    OK.
    Como não tenho muita experiência em escrever pseudocodigo, provavelmente não representei da forma mais correcta as leituras/escritas de uma tabela de hash

    De qualquer forma, ambas são soluções possíveis e válidas para o problema :p
     

Partilhar esta Página