Duvida sobre Metodo random

10 respostas
wilsontads

Ola, sou novo em java…
estou lendo um livro, que parece-me ser muito bom.
infelizmente, estudo só e não conto com ajuda de nenhum orientado.
Gostaria que se possivel, me ajudassem com um desafio do livro.
é o seguinte:

Pede-se para criar uma classe que simule a jogada de um dado (de seis lados)
dez vezes e mostre o resultado na tela, como ilustra a figura 4.19.

eu ja fiz uma parte… porém, estou tendo problema com o loop do programa…
pois, ele executa a chamada:

“Jogada nº” <<-- Está executando oito vezes, sendo que é pra executar 10.

veja abaixo:

>

package Cap4Exercicios;
public class Exercicio1Pag94_DUVIDA {

static int num;

public static void main(String[] args) {

[b]for (int x=1; x<=10; x++){
for (int lado = 1; lado <= 10; lado++) {
      num = (int) (Math.random()*7);
     System.out.println("Lado: "+ num);
    }

} [/b] }

}

<----

Desde ja agradeço. :roll:

10 Respostas

R

Você no for coloca que o x é igual a 1, e que vai ser menor e igual a 10 as condições certo?

for (int x=1; x<=10; x++){ 

for (int lado = 1; lado <= 10; lado++) { 
num = (int) (Math.random()*7); 
System.out.println("Lado: "+ num); 
}

Por que um for dentro do outro? :shock:

for (int x = 0; x < 10; x++){
num = (int) (Math.random()*7);
System.out.println("Lado: "+ num);
}

Acho que isso irá resolver, se a sua lógica dentro do for estiver correta.Não compilei o exemplo

rodrigo.bossini

Random gerador = new Random(); // Random está em java.util int[] array = new int[10]; for ( int i = 0; i < 10; i++){ array[i] = 1 + gerador.nextInt (6); } for ( int i: array) System.out.print (i + " " );

wilsontads

Rafael

Sua lógica está quase correta,
só que… oque acontece é que essa função ta gerando
8 sorteios. O exercicio me pede que seja gerado 10.
oque acontece após a execução do programa, é o seguinte

–>

Lado: 1
Lado: 1
Lado: 3
Lado: 6
Lado: 3
Lado: 1
Lado: 6
Lado: 2
CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)

<–

wilsontads
Fiz um teste, deixando o laço de repetição [color=red]<=5[/color] deu ok, ele fez o sortei de 5 números. só que, quando ponho <=10, ele continua executando apenas 8 vezes. então, resolvi usar um qualificador.. ou seja, repetir o sortei de 5, e em seguida sortear mais 5 que deveria ser igual a 10 sorteios. só que, mesmo executando o programa 2 vezes, ele só faz o sorteio de 8. alguém pode ajudar? :?:
package Cap4Exercicios;

public class Exercicio1Pag94_DUVIDA {

    static int num;

    public static void main(String[] args){
    wilson ();
    wilson ();
    }
    public static void wilson (){
    {
        for (int x=1; x<=5; x++){
        
            num = (int) (Math.random() * 7);
            System.out.println("Lado1: " + num);
                        
        }
    }
}
}
O
Acho que você tá se confundindo por causa do tamanho do seu console de saída. Seu primeiro programa tem 100 linhas de saída. O código do rod.attack está correto.
import java.util.Random;

public class Exercicio1Pag94_DUVIDA {

	public static void main(String[] args) {
		wilson();
		System.out.println();
		lancarDados(10);
	}

	public static void wilson() {
		System.out.println("método wilson:");
		for (int x = 1; x <= 10; x++) {
			int num = (int) (Math.random() * 7);
			System.out.println("Lançamento" + x + ": " + num);
		}
	}

	public static void lancarDados(int quantidade) {
		System.out.println("método lancarDados:");
		Random gerador = new Random(); // Random está em java.util
		for (int i = 0; i < quantidade; i++) {
			int valor = 1 + gerador.nextInt(6);
			System.out.print(valor + " ");
		}
	}
}
Saída:

[img]http://img5.imageshack.us/img5/9060/saida.jpg[/img]

wilsontads
Valeu galera, pela ajuda.. foi de muito útil a dica de todos, pra alguém que tiver uma duvida semelhante futuramente, meu programinha de sorteio de lado de dados ficou assim:
package Cap4Exercicios;
//import javax.swing.JOptionPane;
public class Exercicio1Pag94_DUVIDA {

    static int num=1;

    public static void main(String[] args){
    wilson ();
        }
    public static void wilson (){
    {

        for (int x=1; x<=10; x++){
        
            num = (int) (Math.random() * 7);
           System.out.println("Lado"+x+": " + num);
                        
        }
    }
}
}

e a execução ficou :

-->
Lado1: 4
Lado2: 2
Lado3: 1
Lado4: 4
Lado5: 6
Lado6: 3
Lado7: 4
Lado8: 0
Lado9: 0
Lado10: 5
<--
Só fico com uma pequena duvida..srsr
no dado, existe lado zero? :lol:

E realmente ozix, eu me confundi..hehe
pq no console, tava sendo exibido apenas apartir da jogada nº3..
é pq esqueci de rolar pra cima o console..=D
srs
mas, valeu.. não acontecerá novamente!

O

wilson, seu programa está errado. Tem como usar o Math.random() pra conseguir uma distribuição uniforme entre 1 e 6 discretamente, mas com certeza não é apenas multiplicando por 7 e pra esses casos é melhor usar o nextInt(int) da classe Random (cujo método nextDouble() inclusive, é chamada pelo método Math.random()), portanto, use o programa do rod.attack, principalmente a parte gerador.nextInt(6), e já que você só quer mostrar mesmo, não precisa nem usar o array, basta declarar uma variável internamente ao for antes de imprimir seu valor.
Ah, e não use variável de instância se você não vai precisar dela, principalmente static, matenha o escopo das variáveis o menor possível. Boa sorte com os estudos.

wilsontads

Grato!

DavidUser
Se não quiser alterar muito seu programa é adicionar 1 ao Math.random()*7:
for (int x=1; x<=10; x++){   
           
           num++ = (int) (Math.random() * 7); 
           System.out.println("Lado"+x+": " + num);   
                           
        }
não copilei mais caso não funcione assim adicione mais uma linha em que num = num +1.
O

Na verdade é:int num = (int) (Math.random() * 6) + 1; Mas eu estava errado quanto a uniformidade da distribuição.

Criado 7 de março de 2009
Ultima resposta 8 de mar. de 2009
Respostas 10
Participantes 5