2
respostas

Gerar nome aleatórios usando random e tabela ascii

preciso gerar um nome e sobre de uma pessoa, mais preciso gerar ele randomicamente e além disso, eu preciso gerar isso usando a tabela ascii, alguém pode me ajudar ? estou com dificuldades

2 respostas
public class TesteASCII {
    public static void main(String[] args) {
        //Transforma um conjunto de bytes e String
        byte[] letra = {70,65,72,69,67,79,78};
        System.out.println("+> " + new String(letra));
        //Pega a letra referente a um inteiro
        int x = 115;
        System.out.println("-> " + (char)x);
        x = 110;
        System.out.println("-> " + (char)x);
        x = 105;
        System.out.println("-> " + (char)x);
        x = 119;
        System.out.println("-> " + (char)x);
        //Pegar uma String, gerar Bytes e retornar String
        String sTexto = "PortalJava.Com";
        byte[] textoByte =  sTexto.getBytes();
        System.out.println("=> " + new String( textoByte ));
    }
}

Achei esse código, parece que o que você vai precisar fazer é ler 2 coleções de números (uma para nome e outra para sobrenome) converter cada um desses números para char(tipo letra em java) e depois concatenar as letras.

Oi Rodrigo, tudo bem? Escrevi um código rapidinho aqui pra te ajudar a dar um start. Olha ele aqui:

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;


public class TesteRandom {

    public static void main(String[] args) {

        // letras maisculas 65 - 90
        // letras minúsculas 97 - 122

        ThreadLocalRandom gerador = ThreadLocalRandom.current(); 

        int tamanhoNome = gerador.nextInt(3, 10);
        int tamanhoSobrenome = gerador.nextInt(3, 10);

        char primeiraLetraNome = (char) gerador.nextInt(65, 90);
        char primeiraLetraSobreNome = (char) gerador.nextInt(65, 90);

        StringBuilder nome = new StringBuilder().append(primeiraLetraNome);
        StringBuilder sobreNome = new StringBuilder().append(primeiraLetraNome);


        for (int i = 1; i < tamanhoNome; i++) {
            char letra = (char) gerador.nextInt(97, 122);
            nome.append(letra);
        }

        for (int i = 1; i < tamanhoSobrenome; i++) {
            char letra = (char) gerador.nextInt(97, 122);
            sobreNome.append(letra);
        }

        System.out.println(nome + " " + sobreNome);
    }
}

O problema do Random é que ele gera números sem definir um intervalo base, ou seja, eu não tenho um limite inferior, mas superior sim, então eu consigo usar esse ThreadLocalRandom que consegue me ajudar nessa parte.

Na tabela ASCII (https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html) eu tenho ali os números que representam os caracteres do alfabeto. A ideia então é gerar números que convertidos para chars me deem uma letra, por isso o intervalo inferior é interessante, posso passar pra ele exatamente o intervalo de números que correspondem ao alfabeto.

Por baixo dos panos o ThreadLocalRandom usa o Random. Então você tem um problema a menos.

Eu precisei gerar o tamanho do nome dinâmico também pra conseguir uma variância e não ficar preso a um número mágico no laço que completa o restante do nome.

O StringBuilder facilita as conversões, como estou gerando números que são convertidos para chars, o Builder consegue juntar todos os chars em uma string só sem precisar concatenar tudo.

Como eu disse, esse código é só um start, você pode melhorar com regras mais complexas.