Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

como gerar nome, data de nascimento e sexo de uma pessoa usando a classe Ramdom

preciso gerar nome, data de nascimento e sexo de uma pessoa usando a classe Random, que gera valores aleatórios, além disso preciso guarda isso tudo dentro de um ArrayList, o exercício tem várias regras, mas primeiro preciso saber como fazer isso, quem puder me ajudar, vou inserir no código a forma que minha aplicação deve mostrar o programa final

RELAÇÃO DE PESSOAS CADASTRADAS
SEQ. NOME DA PESSOA DT.DE NASC. SEXO
=====================================================================
001 ABCDTUEWQPRDFGJ ZXCVBNHYUTRWQFIPLÇMN 30/08/1960 MASCULINO
 DEPENDENTES:ASDFEDERFEFKKUJ IUYHKJUTEDDFGHJKLÇPO 30
 KJUHGFRDESWQAZX OLKIMNBHGTFRDCDESWAQ 20
002 KDFJDSKFJFDKFDJFDK DKFJDKFJSDDKDFDKFFFKJF 10/05;/1995 FEMININO
 DEPENDENTES: Sem dependentes
10 respostas

Bom dia Rodrigo, esses valores já estarão cadastrados em algum lugar?

boa tarde! não este foi um exemplo que o professou deu, eu preciso usar a classe random e através dela eu preciso gerar nome, data de nascimento e sexo tudo aleatório, eu conseguir gerar letras aleatório, mais não faço ideia de como gerar data de nascimento e sexo de uma pessoa, pois tenho algumas restrições... tenho essas restrições no exercício..

O nome de cada pessoa deve possuir duas partes: um nome e um sobrenome. O nome deve ter até 15 letras e o sobrenome, 20. A data de nascimento deve ser maior ou igual a 01/01/1930. O sistema não deve aceitar datas i nválidas como 30/02/xxxx, 31/11/xxxx (xxxx representa qualquer ano a partir do indicado anteriormente). Cada objeto pessoa deve ser inserido em uma Collection ArrayList. Essa Collection deve ser lida para que seja apresentado um relatório sobre as pessoas existentes na respectiva Collection. Cada pessoa poderá ter nenhum, um ou mais de um dependente. Ca da dependente deve ser r epresentado por um objeto da classe Dependente, a qual deve possuir nome(String) e idade(int) . O nome do dependente deve ser gerado no mesmo formato do nome de uma pessoa, e xplicado anteriormente . A idade de cada dependente deve ser gerada randomica mente entre 1 e 80 anos. Cada objeto pessoa deve possuir um atributo que represente uma coleção de seus dependentes. A quantidade de dependent e para cada pe ssoa deve ser gerada randomicamente entre 0 e 4 dependentes.

solução!

Boa tarde Rodrigo.

Quanto a data, você pode seguir o que esse cara fez: https://stackoverflow.com/questions/3985392/generate-random-date-of-birth

Ele gera o ano aleatório entre 1900 e 2010 (bastaria você alterar para os anos que você quer) e depois gera aleatoriamente um dia do ano (entre 1 e 365). Após isso, ele seta o dia gerado no Calendar e tem uma data completa.

Ex: gerou ano 1987 e dia 35. Gera a data 04/02/1987, pois o 35º dia do ano 1987 é 04/02.

Para a String, achei essa solução: https://dzone.com/articles/generate-random-alpha-numeric

Nela, basta chamar o método randomAlphaNumeric() passando a quantidade de letras que você quer na String. Para que suas Strings não contenham números, basta você remover os números da constante ALPHA_NUMERIC_STRING.

muito obrigado por me ajudar, valeu pelos artigos

boa tarde! conseguir implementar o código deste último artigo que me enviou, só que não consigo fazer ele executar, sabe me dizer porque ? criei uma classe pessoa, e na minha classe principal onde tenho o método main, preciso chamar este método lá, consigo chamar, mas ele não retorna nada além de uma exception

// Gerando nome da pessoa com letras aleatórias 
    private static String letras = "ABCDEFGHIJKLMNOPQRSTUVYWXZ";
        public static String geradorNome(int quantidade) {
            StringBuilder construtor = new StringBuilder();
                while (quantidade != 0) {
                int character = (int) (Math.random() * letras.length());
                construtor.append(letras.charAt(character));

        }
  return construtor.toString();
}

Olá Rodrigo.

Provavelmente o erro que você está recebendo é "Exception in thread "main" java.lang.OutOfMemoryError: Java heap space" depois de algum tempo executando, correto?

Isso é porque seu while está com uma expressão que sempre será avaliada como true, tornando ele infinito.

Para resolver isso, basta adicionar o operador -- (decrementador) para que a variável quantidade vá diminuindo conforme vão sendo gerados os caracteres da String aleatória.

while (quantidade-- != 0) { ...

A leitura desse while seria assim: suponha que você quer gerar uma String com 5 letras. Depois da primeira vez que passa pelo while, gera 1 letra e faltam 4, por isso a quantidade é decrementada. Isso se repete até que a String tenha tamanho 5 e a quantidade fique com valor 0, saindo do laço de repetição.

Ah tá consegui entender agora, vou arruma este erro, muito obrigado por me ajudar, valeu.

boa tarde! você poderia me ajudar com outra forma de criar a data de nascimento, pois o professor disse que estou fazendo errado desta forma, ele disse que eu preciso randomizar a data utilizando a classe random e não utilizar um pacote com calendário que entrega praticamente pronta as data

Nesse caso, acredito que o caminho seja trabalhar com as datas em milisegundos.

Quando você faz o seguinte:

Date d = new Date();
d.getTime();

Esse getTime() retorna a quantidade de milisegundos que a data tem, contados a partir de 01/01/1970. Se a data for posterior a 1970, retornará um valor positivo. Se for uma data anterior a 1970, retornará negativo.

A solução esperada provavelmente é encontrar um long randômico entre 01/01/1970 (-1259564713654 em milisegundos) e data atual. A partir do número encontrado, você cria a data como mostrado abaixo:

Date dataGerada = new Date(miliRandomicoGerado);

Um exemplo base está abaixo, mas você precisa melhorá-lo e principalmente entendê-lo, pois essa é a parte complicada desse problema:

Long dataInicialMilis = Long.parseLong("-1259564847442"); // equivale a 01/01/1930
long dataAtualMilis = new Date().getTime(); // data atual em milisegundos

int count = 0;
while (count < 100) {            
    Long milis = (long) (dataInicialMilis + (Math.random() * (dataAtualMilis + 1 - dataInicialMilis)));

    System.out.println(new Date(milis));

    count++;
}

Só coloquei esse while pra você ver que nenhuma das datas ultrapassa o range definido (01/01/1930 - hoje).

beleza, irei fazer isso agora, muito obrigado por me ajuda novamente.