Números aleatórios

Código 1:

[code]//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);
}

}
[/code]

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 ?

vc pode explicar melhor qual é sua dúvida?

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

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 ?

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.

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.

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.