Classe "Random": Como gerar caracteres "rando

12 respostas
Archetype

Estou aprendendo JAVA na faculdade, meio que cambaleando, mas vou tentando aprender… O meu problema é o seguinte. Gostaria de saber como eu posso imprimir na tela, uma sequência de seis caracteres (*, & , $ , ! , @, #), de forma aleatória, usando a classe Random?

Como isso faz parte de um trabalho, se puderem me ajudar em mais uma coisa, agradeceria. Além de gerar esses seis caracteres, eu teria que gerá-los mas não os mostrariam na tela, eles ficariam ocultos, pois o usário teria que “chutar” qual é a sequência correta dos caracteres. Ou seja, tenho que gerá-los e ocultá-los ao mesmo tempo.

Atenciosamente,
Bruno Mendoza $aid

12 Respostas

sergiolopes

atribua um codigo para cada caracter e depois gere um numero aleatoriamente com a classe Random. por exemplo, se der 0 equivale a $; se der 1 equivale a &; e etc

sobre nao colocar na tela, entao guarde a sequencia em um array. aí vc le as entradas do usuario e compara com a sequencia armazenada no array

Grinvon

Bem, nao irei fazer o seu trabalho, mas vou lhe ajudar a como fazer o projeto. Pela Math.random() da para gerar numero double, podemos converter eles para int e interpretar cada int como um char, e dai ocultar a sequencia de chars em uma string ou um array de chars, ai fica a seu criterio. :lol: . Acho que agora da para voce começar a fazer o projeto, poste ai o codigo, que a galera do forum vai ajudar.

Archetype

Eu não estou dizendo que alguém tenha que fazer o trabalho por mim. Talvez eu tenha me expressado errado. Só gostaria dessa ajuda, tranqüilo?

Inicialmente, o que fiz, foi isso:

class TrabalhoSOO

{

public static void main(String[] args)

{

System.out.println(" -------------- D E S A F I O --------------");

System.out.println(" “);

EntradaSaida io = new EntradaSaida();

io.print(” Nome do jogador: “);

String jogador;

jogador = io.readLine();

System.out.println(” “);

System.out.println(” Seja bem vindo “+jogador);

System.out.println(” “);

int contador=4;

java.util.Random randGen=new java.util.Random();

for (int i=0;i<contador;i++)

System.out.print(” “+(Math.abs(randGen.nextInt())%6+1)+” ");

}

}

O que justamente fiz, foi usar o “MATH”. Mas depois daí, não fiquei sabendo como posso usar os caracteres ao invés dos números.

Obs.: Essa classe “EntradaSaida” é uma que o nosso professor criou para poder-se “ler do teclado” as informações do usuário;

Muito obrigado pela ajuda!

Grinvon

Faça um switch do qual verifica os numeros e envia o caractere correspondente para cada numero assim…

dentro do loop…

char c;

switch(numero) {

case 1:

c=’$’;

break;

case 2:

c=’*’;

e assim sucessivamente…
va jogando cada valor de C em um array ou convertendo para strings, depois vc tera toda a sequencia pronta, e pega o valor do usuario usando BufferedReader e comparando com a sequencia gerada pelo Pc. Somente isso

aborges

Outra maneira seria …

String[] caracteres =  {"$","#"....};

Daih, basta fazer

caracteres[nro randomico];

Archetype

Muito obrigado pela a juda mas não consigo fazer P.N de tudo o que vocês estão dizendo.

Grinvon

Aqui o codigo:

import java.io.*;

public class Sequencia {
   int num;
   char c;
   static String sequencia="";
   String valor;
   
    public Sequencia() {
     //gera numeros aleatorios 0 a 5
        
      for(int i=0;i<6;i++){
        num = (int) (Math.random()*5);
        
          switch(num) {
              case 0:
                  c='*';
                  break;
              case 1:
                  c='$';
                  break;
              case 2:
                  c='&';
                  break;
              case 3:
                  c='#';
                  break;
              case 4:
                  c='@';
                  break;
              default:
                  c='%';
                  break;
          }//fim do switch
          
         sequencia += String.valueOf(c);
         System.out.println(sequencia);
        }//fim do FOR    
      
    }
    
    public static void main(String[] args)
    {
        new Sequencia();
        analisar();
    }
    
    public static void analisar() {
            try {
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Digite a sequencia correta (caracteres permitidos: *,$,#,@,& e %): ");
            String seq = in.readLine();
           
            while(!seq.equals(sequencia)) {
                //verifica se esta correto
                System.out.print("Digite novamente a sequencia: ");
                seq = in.readLine();
                System.out.println(seq);
            }//fim do while
            
            System.out.println("Voce acertou a sequencia!!!");
        }catch(IOException e) { }    
    
    }
    
}
Archetype

E porque quando eu faço dessa forma dá errado:

class Trabalho

{

public static void main(String[] args)

{

System.out.println(" -------------- D E S A F I O --------------");

System.out.println(" “);

EntradaSaida io = new EntradaSaida();

io.print(” Nome do jogador: “);

String jogador;

jogador = io.readLine();

System.out.println(” “);

System.out.println(” Seja bem vindo “+jogador);

System.out.println(” ");

int numero;

int contador=4;

java.util.Random randGen=new java.util.Random();

char c;

for (int i=0;i<contador;i++)

switch(numero)
{ 
		case 1: 
			c='$'; 
			break; 
		case 2: 
		    c='&amp;';
		    break;
		case 3:
		  	c='#';
		  	break;
		case 4:
			c='!';
			break;
		case 5:
			c='*';
			break;
		case 6:
			c='@';
			break;
			
	}
		System.out.print(" "+(Math.abs(randGen.nextInt())%6+1)+" "); 

}

}

Eu uso JCREATOR, e quando vai compilar a variável NUMERO, sempre dava erro.

sergiolopes

1a dica: qdo colocar codigo aqui no forum, coloque entre as tags [ code ] e [ / code ]

a resposta: deve estar dando erro porque vc nao inicializou a variavel numero… vc precisa colocar algum valor nela antes de passar pelo switch

Archetype

Sérgio: Desculpe pelo cógido “todo errado”.

Eu não vou nem copiar o código que o “Grinvon” passou. Realmente, quando postei pela primeira vez, eu possa ter “pedido” demais, mas também não precisava "exagerar "colocando o código inteiro. Eu vou ficar agradecido, mas não vou copiar nenhuma parte dele.

Atenciosamente,
Bruno Mendoza Said

Grinvon

Pode copiar, é livre, e eu o coloquei aqui com o intuito de lhe ajudar.

Archetype

“Grinvon”,

Sei que é livre copiar, agradeço imensamente pela ajuda, realmente. Mas como eu tenho que aprender esse “troço” de JAVA, por bem ou por mal. Aliás, esse trabalho, está muito “pesado”. Muito gente num tem entendido direito esse lance de JAVA. Mas fazer o que… é professor, temos que acatar! :?

Atenciosamente,
Bruno Said

Criado 27 de março de 2004
Ultima resposta 28 de mar. de 2004
Respostas 12
Participantes 4