Ajuda no programa de Dado

6 respostas
Deise2007

Oi gente, ca estou eu novamente expondo mais uma duvida e esperando por uma breve ajuda. Eu fiz o seguinte:

import java.util.Random;

class Dado {
 private int result;
 
 public int face(){
	 return result;
 }
 public void jogar(){
	 result = (int) (Math.random()*6)+ 1;
 }
}
public class TDado {

	static Dado d = new Dado();
	
	public boolean prob10(){
		int face6=0;
	  for (int i=0; i<10; ++i){
		  d.jogar();
		  if (d.face() == 6){
			  face6=face6 + 1;
		  }
	  }
	  return face6 >= 5;
	}
	public static void main(String[] args){
		TDado td = new TDado();
		int total = 0;
		
		for (int i=0; i < 1000000; ++i){
			if(td.prob10()){
				total = total + 1;
			}
		}
	System.out.println();
	}
}

Bem, eu gostaria que o sistema me retornasse a probabilidade em numeros e nao em true ou false, que eh o que o programa esta fazendo! Como eu tenho que fazer isso?
Outra coisa muito importante, eh com a ultima linha de impressao, pois nao sei o que colocar, ja tentei de tudo. Alguem pode me dizer como seria a linha de saida?

Preciso muito dessa ajuda !

Nesse programa, eu tenho que ter void jogar() e int face() e estimar a probabilidade de obter a face “6” cinco ou mais vezes, em 10 jogadas.

Aguardo uma resposta anciosa :?: :?:

6 Respostas

Roger75

Se você não quer que retorne um boolean deve alterar o retorno do método prob10 para um um double, por exemplo, e fazer as alterações necessárias dentro do método

Deise2007

Ok Roger, vc poderia ser mais explicativo em como eu mudaria os metodos e como ficaria a linha de impressao?

W

Acho que ficaria algo assim :

public int prob10(){  
        int face6=0;  
      for (int i=0; i<10; ++i){  
          d.jogar();  
          if (d.face() == 6){  
              face6=face6 + 1;  
          }  
      }  

      return face6;  
}

Note que eu alterei o tipo de retorno desse metodo de boolean para int. E o retorno eu coloquei pra retorno face6 e nao ( return face6 => 5) que iria retornar um true ou false.
Altere esse metodo e veja se funciona do jeito que vc quer.

//Daniel

W

Acho que ficaria algo assim :

public int prob10(){  
        int face6=0;  
      for (int i=0; i<10; ++i){  
          d.jogar();  
          if (d.face() == 6){  
              face6=face6 + 1;  
          }  
      }  

      return face6;  
}

Note que eu alterei o tipo de retorno desse metodo de boolean para int. E o retorno eu coloquei pra retorno face6 e nao ( return face6 => 5) que iria retornar um true ou false.
Altere esse metodo e veja se funciona do jeito que vc quer.

Quanto ao metodo main, esta um pouco estranho, pelo que entedi o programa tinha a intencao de imprimir quantas vez em 1000000 o dado eh maior ou igual a cinco, agora a gente mudou o metodo acima pra imprimir os numeros, provavelmente o seu metodo main tem que ficar algo assim :

public static void main(String[] args){  
        TDado td = new TDado();  
        int total = 0;  
          
        for (int i=0; i < 1000000; ++i){  
               int resultado = td.prob10();
               System.out.println("Res : " + resultado);  
            }  
        }  

}

Assim vai imprimir o resultado pras 1000000 vezes vc jogou o dado.

//Daniel

Deise2007

Oi gente, já rodei o programa, sendo que a saída, depois dessa ultima alteração, está sendo com números de 0 à 4. É isso mesmo ?
Cada saida Res:, aparece um desses números ao lado. Eles estão se referinfo a probabilidade da face 6 em cada jogada, é isso?
Será que não teria nenhuma estrutura condicional para retornar o numero de probabilidade de obter cinco ou mais vezes a a face 6?
Alterei o num 1000000 para 10, já que são 10 jogadas. Realmente não entendi porque colocaram esse numero enorme nessa linha.

Ajudem me !!! pleaaasseeee

W

Esse programa ta fazendo o seguinte

quando vc roda td.prob10(), vai ter um loop com 10 interacoes gerando numeros randomicos e testando se eh igual a 6 se for igual a 6 soma na viariavel face6, quando acaba as 10 interacoes do loop, o retorno eh um teste se de 10 jogadas pelo menos 5 foram face 6. Isso vc pode ver no metodo :

public boolean prob10(){  
      int face6=0;  
      for (int i=0; i<10; ++i){  
          d.jogar();  
          if (d.face() == 6){  
              face6=face6 + 1;  
          }  
      }  
      return face6 >= 5;  
}

no metodo main, tem o seguinte :

for (int i=0; i < 1000000; ++i){  
      if(td.prob10()){  
           total = total + 1;  
      }  
}

Dentro do loop de 100000 ( que vc alterou pra 10 ), vai fazer o seguinte : chamar o metodo prob10, que vai fazer aquilo que eu te falei acima, fazer 10 jogadas e retornar se das 10 jogas pelo menos 5 foram face 6 e vai retornar verdadeiro ou falso.
Como eu falei pra vc alterar o metodo prob10 pra retornar face6, ele ta retorno o numero de vezes que caiu face 6 em 10 jogadas. Anteriormente o programa estava retornando verdadeira se caiu face 6 em pelo menos 5 jogas e falso se caiu menos de 5 vezes face 6.

//Daniel

Criado 20 de setembro de 2007
Ultima resposta 24 de set. de 2007
Respostas 6
Participantes 3