Programinha da Facul [+ajuda]

Bom dia, sou novo no forúm e estou conhecendo Java esse semestre na faculdade e o professor passou um programinha para entregar, mas estou quebrando a cabeça aqui e não saiu muita coisa. Eu não vou pedir para que me deem o resultado do programa até mesmo por que eu quero aprender isso. Mais eu tenho algumas perguntas e se alguem puder me ajudar vai adiantar meu serviço aqui.

O professor só teu arrays, switch, for, while, do-while, if, else logo eu só posso criar meu programa usando isso…

Então vamos la, o programa é para simular o lançamento de dados e tem o seguinte enunciado.

Escreva um programa que simule o lançamento de um dado N vezes (sendo N uma constante que pode ser inicializada com qualquer valor) e imprima quantas vezes deu cada face do dado. Estenda o programa para o lançamento de dois dados e calcule e imprima a quantidade de vezes que deu cada soma possivel. Estenta o programa para o lançamento de 3 dados e calcule e imprima a quantidade de vezes que deu cada soma possivel.

A parte de lançamento de dados e dizer quantas vezes deu cada face eu fiz, acho que ficou um pouco confusa, mas deu certo só que eu não sei como gerar um número aléatorio, no caso o lançamento do dado usando o que o professor já deu. Achei no forúm como gerar o tal numero aleátorio, mas tenho certeza que ele não vai aceitar.

E a segunda pergunta é: eu estou tentando fazer a segunda parte e a terceira armazenando os valores das somas em um array e depois comparando para ver quantos são iguais e fazendo uma contagem. Essa é minha lógica, mas também não tenho a minima ideia de como começar isso.

Quem puder da uma força ae eu agradeço

Vejam o que eu já fiz

import java.util.Random;  
public class Dados {
	public static void main(String[] args) {
		int n=10;
		int f1=0, f2=0, f3=0, f4=0, f5=0, f6=0;
		for (int i=0; i<n; i++) {
                        // Isso de como gerar o número não tem como eu saber, pois o professor não deu eu peguei aqui no forúm e adeptei
			Random r1 = new Random(); 
            int lance = (r1.nextInt(6)+1);                    
		    switch (lance) {		  
		    	case 1: f1+=1; break;
		    	case 2: f2+=1; break;
		    	case 3: f3+=1; break;
		    	case 4: f4+=1; break;
		    	case 5: f5+=1; break;
		    	case 6: f6+=1; break;    
		   }		    
		}
		System.out.println("Lançamento de um dado 10 vezes e mostrando quantas vezes deu cada face do dado.");
		System.out.println("Face01 = " + f1);
		System.out.println("Face02 = " + f2);
		System.out.println("Face03 = " + f3);
		System.out.println("Face04 = " + f4);
		System.out.println("Face05 = " + f5);
		System.out.println("Face06 = " + f6);

pois é kra…as vezes certos professores pedem algumas bizarrices da vida…

aki no guj temos um tutorial de como gerar numeros aleatorios, mais utiliza o math.random()… sem isso, e aliais só com o q vc passo q pode usar, eu não imagino mto como q sepossa gerar um numero q seja aleatorio…

o q eu te aconselho seria mesmo conversar com ele a respeito de poder usar isso dai …

esse é o tutorial q eu te falei, espero q te ajude…

http://www.guj.com.br/java.tutorial.artigo.17.1.guj

Cara, tenha uma coisa em mente, a nao ser que esteja escrito no enuncionado que vc tenha que usar apenas o que o professor deu, vc nao está obrigado a nao usar outro comando ou estrutura, vc tem toda a possibilidde de pesquisar, seja em forums, seja em livros, como gerar um numero aleatorio, que no meu ponto de vista, é a unica maneira de fazer o sorteio dos numero que vc precisa.

Afinal de contas o trabalho é pra ver se vc aprendeu a usar as estruturas e comandos que o professor ensinou, e nao como gerar numeros aleatórios sem usar o math.random.

Será que o número gerado precisa ser aleatório mesmo? Será que só parecer aleatório não serve?
(Seria bom vc apresentar a dúvida para o seu professor, ele não lê e-mail?)

Senão vc poderia fazer uma função de “pseudo-random” assim:

[code]private static int index;
private static int[] numbers = {
1, 1, 3, 6, 6, 6, 4, 3, 3, 3,
4, 3, 1, 2, 2, 3, 4, 4, 4, 5,
3, 2, 5, 4, 6, 1, 3, 3, 1, 3,
2, 2, 6, 1, 6, 2, 5, 6, 4, 1,
2, 6, 2, 4, 2, 4, 2, 5, 1, 2
};

/** Com base em um N qualquer, inicializa o gerador de números aleatórios.
Essa função deve ser chamada uma única vez. Usamos aqui o operador de resto, assim,
o número dado virará dos índices de nosso array */
public static void inicializa_random(int n)
{
index = n % numbers.length;
}

/**
Escolhe um dos números do array. Como o array contém números em uma
ordem aleatória, vai dar a impressão de ter gerado um número 100% aleatório.
Obviamente, não é o caso.
*/
public static int random()
{
return numbers[index];
index = (index+1) % numbers.length;
return numbers[index];
}
[/code]

Os números no array “numbers” eu escolhi aleatoriamente. Você pode entrar num site como o http://www.random.org/ pedir para te gerar uns 50 números (usando o Integer generator) e cadastra-los na ordem em que aparecem no array (foi o que eu fiz).

Assim você vai ter um comportamento que parece aleatório (e efetivamente vai ser, para os primeiros lançamentos do dado), sem usar a classe random, e dentro do que o seu professor já forneceu na matéria.

package dados;

public class Dado {
	public int[] pontos = new int[6];
	public final int vezes=10;
	
	
	public int GerarNumero(){
		return  (int) (1 + Math.random() * 6);
	}
	
	public void IniciarLancamento(){
		for(int a=0; a<vezes;a++){
			pontos[GerarNumero()-1]++;
		}
		System.out.println("###########################");
		System.out.println("## - Fim do lancamento - ##");
		for(int a=0;a<pontos.length;a++){
			System.out.println("## Numero: "+ (a+1) + " - obteve -> " + pontos[a] + " pontos. ##");
		}
	}

	public void SomarDados(int[] novos){
		for(int a=0; a<pontos.length;a++){
			pontos[a]+= novos[a];
		}
		System.out.println("###########################");
		System.out.println("## - Soma foi  - ##");
		for(int a=0;a<pontos.length;a++){
			System.out.println("## Numero: "+ (a+1) + " - obteve -> " + pontos[a] + " pontos. ##");
		}
	}
	
	public int[] getPontos(){
		return pontos;
	}

}

package dados;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
   
		Dado dado1 = new Dado();
		Dado dado2 = new Dado();
		Dado dado3 = new Dado();
		dado1.IniciarLancamento();
		dado2.IniciarLancamento();
		dado3.IniciarLancamento();
		dado1.SomarDados(dado2.getPontos());
		dado1.SomarDados(dado3.getPontos());

	}

}

Caso ache melhor mude o metodo GerarNumero para o exemplo do vini

[quote=ViniGodoy]Será que o número gerado precisa ser aleatório mesmo? Será que só parecer aleatório não serve?
(Seria bom vc apresentar a dúvida para o seu professor, ele não lê e-mail?)

Senão vc poderia fazer uma função de “pseudo-random” assim:

[code]private static int index;
private static int[] numbers = {
1, 1, 3, 6, 6, 6, 4, 3, 3, 3,
4, 3, 1, 2, 2, 3, 4, 4, 4, 5,
3, 2, 5, 4, 6, 1, 3, 3, 1, 3,
2, 2, 6, 1, 6, 2, 5, 6, 4, 1,
2, 6, 2, 4, 2, 4, 2, 5, 1, 2
};

/** Com base em um N qualquer, inicializa o gerador de números aleatórios.
Essa função deve ser chamada uma única vez. Usamos aqui o operador de resto, assim,
o número dado virará dos índices de nosso array */
public static void inicializa_random(int n)
{
index = n % numbers.length;
}

/**
Escolhe um dos números do array. Como o array contém números em uma
ordem aleatória, vai dar a impressão de ter gerado um número 100% aleatório.
Obviamente, não é o caso.
*/
public static int random()
{
return numbers[index];
index = (index+1) % numbers.length;
return numbers[index];
}
[/code]

Os números no array “numbers” eu escolhi aleatoriamente. Você pode entrar num site como o http://www.random.org/ pedir para te gerar uns 50 números (usando o Integer generator) e cadastra-los na ordem em que aparecem no array (foi o que eu fiz).

Assim você vai ter um comportamento que parece aleatório (e efetivamente vai ser, para os primeiros lançamentos do dado), sem usar a classe random, e dentro do que o seu professor já forneceu na matéria.[/quote]

Vini, dei uma olhada neste site e achei muito legal.
Tem até geração de números pra Mega Sena.
Muito interessante.

Edit:

Opa galera, acho que consegui terminar com algumas dicas principalmente com a ajuda do Math.random() acho que o professor não vai xiar por que eu coloquei isso… eu só não gostei foi desse monte de linha de case do switch deixanto o programa com muitas linhas, mas foi a unica maneira que eu encontrei para fazer as adicições nos contadores. Vejam como ficou o código e obrigado a ajuda de todos. :wink:

Será que da pra melhorar alguma coisa? ta funcionando perfeito… :stuck_out_tongue:

public class Dados {
	public static void main(String[] args) {
		int n = 10;		
		int dado[] = new int[6];		
		for (int i = 0; i < n; i++) {
			int lance1 = (int) (1 + Math.random() * 6);                    
		    switch (lance1) {		  
		    	case 1: dado[0]+=1; break;
		    	case 2: dado[1]+=1; break;
		    	case 3: dado[2]+=1; break;
		    	case 4: dado[3]+=1; break;
		    	case 5: dado[4]+=1; break;
		    	case 6: dado[5]+=1; break;
		   }		    
		}
		System.out.println("Lançamento de um dado 10 vezes e mostrando quantas vezes deu cada face do dado.");
		for (int i = 0; i < dado.length; i++) {			
			System.out.println("Face "+(i+1) + " = " + dado[i] + " vezes.");
		}
		
		// PARTE DO LANÇAMENTO DE 2 DADOS
		System.out.println("");
		System.out.println("Lançamento de dois dados e a quantidade de vezes que deu cada soma possível");
		int cont[] = new int[11];		
		for (int i=0; i<n; i++) {
			int lance1 = (int) (1 + Math.random() * 6);
			int lance2 = (int) (1 + Math.random() * 6);
			int soma = lance1 + lance2;			
			switch (soma) {
				case 2: cont[0]+=1; break; 
				case 3: cont[1]+=1; break; 
				case 4: cont[2]+=1; break;
				case 5: cont[3]+=1; break;
				case 6: cont[4]+=1; break;
				case 7: cont[5]+=1; break;
				case 8: cont[6]+=1; break;
				case 9: cont[7]+=1; break;
				case 10: cont[8]+=1; break;
				case 11: cont[9]+=1; break;
				case 12: cont[10]+=1; break;
			}
		}		
		for (int i=0; i<cont.length; i++) {			
			if (cont[i] > 0) {
				System.out.println("Soma " + (i+2) + ": apareceu " + cont[i] + " vezes.");
			}						
		}
		
		// PARTE DO LANÇAMENTO DE 3 DADOS
		System.out.println("");
		System.out.println("Lançamento de três dados e a quantidade de vezes que deu cada soma possível");		
		int cont2[] = new int[16];		
		for (int i=0; i<n; i++) {
			int lance1 = (int) (1 + Math.random() * 6);
			int lance2 = (int) (1 + Math.random() * 6);
			int lance3 = (int) (1 + Math.random() * 6);
			int soma = lance1 + lance2 + lance3;			
			switch (soma) {				 
				case 3: cont2[0]+=1; break; 
				case 4: cont2[1]+=1; break;
				case 5: cont2[2]+=1; break;
				case 6: cont2[3]+=1; break;
				case 7: cont2[4]+=1; break;
				case 8: cont2[5]+=1; break;
				case 9: cont2[6]+=1; break;
				case 10: cont2[7]+=1; break;
				case 11: cont2[8]+=1; break;
				case 12: cont2[9]+=1; break;
				case 13: cont2[10]+=1; break;
				case 14: cont2[11]+=1; break;
				case 15: cont2[12]+=1; break;
				case 16: cont2[13]+=1; break;
				case 17: cont2[14]+=1; break;
                                case 18: cont[15]+=1; break;
			}			
		}		
		for (int i=0; i<cont2.length; i++) {			
			if (cont2[i] > 0) {
				System.out.println("Soma " + (i+3) + ": apareceu " + cont2[i] + " vezes.");
			}						
		}		
	}
}