[RESOLVIDO] Gerar letra aleatória com ints de 65 a 90

package trabalho2;

import java.util.Scanner;
import java.util.Random;

public class Trabalho2 {
    
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        Random ra = new Random ();
        
        int valor;
        
        valor = (char)(65 + (Math.random() * 90));
        
        System.out.println(valor);
        
    }
}

Quero que ele gere uma letra aleatória.

As letras são de 65 a 90 então preciso gerar um número aleatório entre 65 e 90 e passar ele pra char.

Do jeito que eu fiz não deu certo, alguém pode ajudar ?

OBS: O SCANNER VOU USAR DEPOIS, ELE NÃO TÁ ALI DE BOBERA ^^

Obrigado!

Note que random gera valores entre 0 (inclusive) e 1 (exclusive).

Suponha que o valor de random() fosse zero. O caracter seria 65 + 0 = 65, está certo.

Agora suponha que o valor de random() fosse 1. O caracter resultante seria 65 + 90 = 155, o que não está certo para você.

Pense só um pouquinho - só um pouquinho mesmo. Que conta você precisa fazer para o maior valor dar 90, em vez de 155? Deve faltar uma continha bem bobinha aí.

Consegui cara…

Fiz um pouco diferente mas deu certo:

        valor = (65 + ra.nextInt(90 - 65));
        
        System.out.println((char)valor);

Minha dúvida agora é o seguinte:

  • Preciso agrupar 3 letras e 2 números para formar uma senha.
    Blza, gerei lá 3 letras aleatórias e 2 números aleatórios e deu
    A, G, F, 4 e 9… preciso que agrupe tudo numa variável e imprima: AGF49

Alguma dica???

Obg!!

1 curtida

faça uma String e concatene tudo nela…

Jogue td em uma String

Gere seus valores, provalvemente vc ira gerar em um looping.

entao vc pode concatenar os valores gerados

String senha = "";

// For onde contem a geracao da senha
for(...) {

senha.concat( String.valueOf( (char)valor));

}

Abraço

Entendi mais ou menos…

Tipo nesse código que vc falo ele ta convertendo cada um dos 5 valores aleatórios para char e depois concatenando os 5, certo ?

Eu preciso que convetar somente 3 valores para char, e os outros dois permaneçam int.
Para daí sim concatenar os 5 valores e ficar tipo:

String senha = "ABC12";

EDIT

Olha meu código

package trabalho2;

import java.util.Scanner;
import java.util.Random;

public class Trabalho2 {
    
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        String senha = "";
        Random ra = new Random();
              
        int sistema = 1, valor, i;
        int somaValores[] = new int [5];
        int opcao;
        
        System.out.println("SISTEMA DE GERENCIAMENTO DE SENHAS");
        while (sistema == 1) {
            System.out.println("\nEscolha a opcao que deseja executar:");
            System.out.println("1   para gerar senha normal.");
            System.out.println("2   para gerar senha prioritaria.");
            System.out.println("3   para chamar o proximo da fila.");
            System.out.println("\nSENHA DA VEZ: ");
            System.out.println("\n0   SAIR");
            opcao = sc.nextInt();
            while (opcao!=1 && opcao!=2 && opcao!=3 && opcao!=0) {
                System.out.println("Opcao invalida. Digite novamente:");
                opcao = sc.nextInt();
            }

            if (opcao == 0) {
                System.out.println("SISTEMA FINALIZADO");
                System.exit(0);
            }

            if (opcao == 1) {
                for (i = 0; i < 3; i++) {
                    valor = (65 + ra.nextInt(90 - 65));
                    somaValores[i] = valor;
                }
                for (i = 3; i < 5; i++) {
                    valor = ra.nextInt(10);
                    somaValores[i] = valor;
                }
                senha.concat(String.valueOf((char)valor));
                
                System.out.println("Sua senha: " + senha);
            }
            
            if (opcao == 2) {
                for (i = 0; i < 3; i++) {
                    valor = (65 + ra.nextInt(90 - 65));
                    somaValores[i] = valor;
                }
                for (i = 3; i < 5; i++) {
                    valor = ra.nextInt(10);
                    somaValores[i] = valor;
                }
                senha.concat(String.valueOf((char)valor));
                
                System.out.println("Sua senha: " + senha);
            }
        }     
    }
}

Ta acusando erro no senha.concat…

Fala que a variavel valor não foi inicializada.

o que ele quis dizer com valor, é no caso " A B C 1 2" entendeu ?
vc vai ter que ir percorrendo os valores da senha e ir concatenando…

Eu gero os 5 valores como números.
E armazeno eles no vetor de inteiros:

valores[0], valores[1], valores[2], valores[3] e valores[4].
65, 66, 67, 1 e 2

Depois de gerar os 5 quero passar os valores que estão nas posições 0, 1 e 2 para char.
Aí sim concatenar os recém valores char com os valores das outras posições.
Ficando ABC12.

Não sei se é isso que vcs estão me expicando como fazer mas eu não entendi ^^

Valeuuu

String senha = String.valueOf(valores[0]) + String.valueOf(valores[1]) + String.valueOf(valores[2]) + String.valueOf(valores[3]) + String.valueOf(valores[4]);

creio que seria isso q vc quer fazer…

Valeuu ;D
Deu certo…

Abraçooos galera!