Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Como sortear números aleatórios sem repetição?

    var jogo = [];
    var chute = [];
    var contador = 0;

    // Sorteando os números do jogo
    for(var i = 0; i < 6; i++) {
        var numero = Math.round(Math.random() * 60);
        if (jogo[i] != numero) {
            jogo.push(numero);
        }
    }

    // Pegando os números do chute
    for(var j = 0; j < 6; j++) {
        var posicao = j + 1;
        var num = parseInt(prompt("Digite o " + posicao + "  número"));
        chute.push(num); 
    }


    // Comparando os valores dos dois arrays
    for(var i = 0; i < 6; i++) {
        for(var j = 0; j < 6; j++) {
            if (jogo[i] == chute [j]) {
                contador = contador + 1;
            }
        }

    }

    alert("Você achertou " + contador + " números!")

Olá!! Estou tentando resolver um exercício de "loteria". Quero que o programa gere 6 valores aleatórios sem repetição e depois comparte com os valores digitados pelo usuário dizendo quantos estão corretos.

Acredito ter conseguido todo o resto, mas não consegui ainda fazer um código para que os números aleatórios não se repitam.

Poderiam me dar uma mãozinha, por favor? Desde já agradeço!!!

5 respostas

Opa, claro! Você apenas verifica o numero naquela posição do array é diferente do número sorteado. Para cada número sorteado, você pesquisar no array inteiro se o número já saiu.. enquanto isso retornar verdadeiro, você continua tentando sortear. Tenta fazer o código e manda aqui :)

    for(var i = 0; i < 6; i++) {
        for(var j = 0; j < 6; j++) {
            while(numero == jogo[j]) {
                var numero = Math.round(Math.random() * 6)
            }
        }
        jogo.push(numero);
    }

Mudei o primeiro FOR para o código acima. Ainda não está funcionando...

O problema é no algoritmo que deve estar errado, certo?

Vou continuar tentando por aqui!

Obrigado!

for(var i = 0; i < 6; i++) {
        var numeroSorteado = Math.round(Math.random() * 5 + 1);
        for (var j = 0; j < 6; j++) {
            while(numeroSorteado == jogo[j]) {
                var numeroSorteado = Math.round(Math.random() * 5 + 1);
           }
        }
        jogo.push(numeroSorteado);
    }

Para ficar mais fácil de entender mudei algumas coisas e não estou deixando sortear o zero.

Tenho certeza que há algo na lógica que está errado, mas ainda não consegui encontrar o que.

Poderia me dar uma luz, por favor?

Obrigado.

solução!

esse é meu chute :)

 <script>
    var jogo = [];
    var chute = [];
    var contador = 0;

    // Sorteando os números do jogo
    for(var i = 0; i < 6; i++) {        
        var numeroSorteado = Math.round(Math.random() * 5 + 1);

        while(jogo.includes(numeroSorteado)){
            numeroSorteado = Math.round(Math.random() * 5 + 1);
        }

        jogo.push(numeroSorteado);
    }    

    // Pegando os números do chute
    for(var j = 0; j < 6; j++) {
        var posicao = j + 1;
        var num = parseInt(prompt("Digite o " + posicao + "  número"));
        chute.push(num); 
    }


    // Comparando os valores dos dois arrays
    for(var i = 0; i < 6; i++) {
        for(var j = 0; j < 6; j++) {
            if (jogo[i] == chute [j]) {
                contador = contador + 1;
            }
        }

    }

    alert("Você achertou " + contador + " números!")
</script>
<meta charset="utf-8">
<script> 

    var jogo = [];
    var chute = [];
    var contador = 0;

    // Sorteando os números do jogo
    var numeroSorteado = Math.round(Math.random() * 59 + 1);
    jogo[0] = numeroSorteado;
    var i = 1;

    while (i < 6) {
        var j = 0;
        numeroSorteado = Math.round(Math.random() * 59 + 1);
            while (j < i) {
                if (numeroSorteado == jogo[j]) { 
                    numeroSorteado = Math.round(Math.random() * 59 + 1);
                    j=0 
                }
                else {
                    j = j + 1
                }
            }
            jogo[j] = numeroSorteado;
            i = i + 1;
        }

    console.log(jogo);

    //Pegando os números do chute
   for(var j = 0; j < 6; j++) {
        var posicao = j + 1;
        var num = parseInt(prompt("Digite o " + posicao + "  número"));
        chute.push(num); 
    } 


    // Comparando os valores dos dois arrays
    for(var i = 0; i < 6; i++) {
        for(var j = 0; j < 6; j++) {
            if (jogo[i] == chute [j]) {
                contador = contador + 1;
            }
        }

    }

    alert("Você acertou " + contador + " números!");
</script>

Alberto, esse includes eu não conhecia!!! Fica bem interessante assim.... mas com uma mãozinha consegui fazer acima!! =)

Muito obrigado pela ajuda!!