Números aleatórios

6 respostas
hackum
Código 1:
//RollDie.java
//Roda um dado de seis lados 6000 vezes.

import java.util.Random; //importa Random
public class RollDie {
	
	public static void main(String args[])
	{
		
		Random randomNumbers = new Random(); //gerador de número aleatório
		
		int frequency1 = 0; //mantém a contagem de 1s lançados
		int frequency2 = 0; //contagem de 2s lançados
		int frequency3 = 0; //contagem de 3s lançados
		int frequency4 = 0; //contagem de 4s lançados
		int frequency5 = 0; //contagem de 5s lançados
		int frequency6 = 0; //contagem de 6s lançados
		
		int face; //armazena o valor lançado mais recentemente
		
		//resume os resultados de 6000 lançamentos de um dado
		for(int roll=1;roll<=6000;roll++)
		{
			
			face = 1 + randomNumbers.nextInt(6); //número de 1 a 6
			
			//determina valor de lançamento de 1-6 e incrementa o contador apropriado
			
			switch(face)
			{
			case 1:
				++frequency1; //incrementa o contador de 1s
			break;
			case 2:
				++frequency2; //incrementa o contador de 2s
				break;
			case 3:
				++frequency3; //incrementa o contador de 3s
				break;
			case 4:
				++frequency4; //incrementa o contador de 4s
				break;
			case 5:
				++frequency5; //incrementa o contador de 5s
				break;
			case 6:
				++frequency6; //incrementa o contador de 6s
				break;//opcional no final do switch
			}
			
		}
		
		System.out.println("Face\tFrequency"); //cabeçados de saída
		System.out.printf("1\t%d\n2\t%d\n3\t%d\n4\t%d\n5\t%d\n6\t%d\n", frequency1, frequency2, frequency3, frequency4, frequency5, frequency6);
	}

}
Código 2:
//RandomIntegers.java
//Inteiros aleatórios deslocados e escalonados.

import java.util.Random; //importa a classe Ramdom
public class RandomIntegers {
	
	public static void main(String args[])
	{
		Random randomNumbers = new Random(); //gerador de número aleatório
		int face; //armazena cada inteiro aleatório gerado
		
		//faz o loop 20 vezes 
		
		for(int counter=1;counter<=20;counter++)
		{
			//seleciona o inteiro aleatório de 1 a 6
			face = 1 + randomNumbers.nextInt(6);
			
			System.out.printf("%d",face); //exibe o valor gerado
			
			//se o contador for divisível por 5, inicia uma nova linha de saída
			if(counter % 5 == 0)
				System.out.println();
			
		}
		
		
		
		
		
	}

}

O código 2, gera 20 loops de 1 a 6, portando a saída o programa, fica assim:
14992
239810
84914
17435
Ou seja, 20 veses de 1 A 6.
Logo, o Código 1, gera 6000 mil vezes código de 1 a 6.
Poderiam me explicar ?

6 Respostas

P

vc pode explicar melhor qual é sua dúvida?

Jonhkr

pesquisa aii sobre o comando FOR

for(int roll=1;roll<=6000;roll++){ codigo; }

isso eh igual a

inicializa a variavel roll com o numero 1

seta a condicao de que se roll for menor ou igual a 6000 entao

executa o codigo e incrementa a roll com mais 1, roll++ = roll = roll+1;

flw

hackum

Olá,

Eu entendi todos os comandos postados nos códigos acima. A questão que tais códigos estão diferentes, sendo que, segue a mesma lógica. Vejamos:

O código 2, tem como saída:
14992
239810
84914
17435
Ou seja, número de 1 a 6 são aleatórios e 20 vezes. Mas o código 1, tem a mesma lógica. Porém, resultados diferentes. for(1 a 6000), 1 a 6000, gera numeros aleatórios de 1 a 6, e veja o resultado:

Face Frequency
1 861
2 861
3 836
4 833
5 874
6 842
7 893

Obrigado!

Obs: face = 1 + randomNumbers.nextInt(6); Gera numeros aleatórios de 1 a 6. Então, pq no código 1, está gerando de 1 a 6000 ?
Dá para entender a minha dúvida ?

ViniGodoy

O printf não tem quebra de linha. O seu código 2 só põe quebra de linha quando o valor sorteado for 5.
Mude seu printf para:

System.out.printf("%d%n", face);

Ou seja, ele está gerando números de 1 a 6, mas como estão ficando grudados uns com os outros, parecem números maiores.

hackum

ViniGodoy, minha dúvida não é essa. O código está escrito corretamente, conforme no livro e o resultado é o mesmo e claro aleatório.

G

o codigo 1 gera 6000 numeros

ele nao gera o numero 6000, ele gera 6000 numeros.

o que ele mostra é

[numeros gerado] [frequencia do numero]

Ex :
1 833

quer dizer que o numero 1 foi gerado 833 vezes…

o outro codigo pelo que entendi faz o mesmo, mas deixa os numeros todos juntos e gera apenas 20 numeros.

Criado 2 de maio de 2011
Ultima resposta 3 de mai. de 2011
Respostas 6
Participantes 5