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

Desafio final

Estou tendo dificuldades pra fazer um verificador dos números sorteados, para que nestes não tenha duplicata, assim como foi feito na aula do bingo.

6 respostas

Fabio da, gostaria de ajudar, mas preciso que me mostre o codigo, ou especificar sua dúvida, porfavor.

Fabio primeiramente devemos ter um array para receber os números sorteados e os jogados:

var numerosSorteados = [];
var numerosJogados = [];

Feito isso precisamos sortear os números:

numerosSorteados.push(Math.round(Math.random() * 100));

No caso do sorteio estamos sorteando apenas os números de 0 a 100, caso queira um intervalo maior apenas aumente o 100.

E receber os números jogados:

numerosJogados.push(parseInt(prompt("Digite um numero para a loteria")));

Utilizamos a função push para pegar o numero digitado pelo usuário no prompt do navegador e adiciona-lo no array, também realizamos o parse do numero pois o mesmo por padrão vem como string e queremos trabalhar com int.

Agora precisamos apenas verificar se o numero jogado esta dentro do array dos numeros sorteados, caso esteja:

if (numerosSorteados[i] == numerosJogados[i])

Caso esteja baste termos um variável e incrementa-la para contar os acertos:

contadorDeAcertos++;

Lembrando que todo o código que eu lhe dei como exemplo deve estar dentro de um for:

for (var i = 0; i < 6; i++) {
    // códigos aqui
}

Espero ter ajudado

A minha questão é que precisamos usar o Math.random() 6 vezes e ele pode gerar duplicidade.

Fabio da, fiz um programa que gera array aleatorio, e depois chama uma função para não deixa duplicidade.

Veja se é isso que você estava esperando.

<!DOCTYPE html>
<html>
    <head>
        <title>Logica Programação</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <script>
        // Não deixa os valores de um array se repetir
        function naoRepeti(array, f) {
            if(array instanceof Array && array.length <= 9) {
                for(var i = 0; i < array.length; i++) {
                    for(var j = (i+1); j < array.length; j++){
                        if(array[i] == array[j]) {
                         // Essa função se houver numeros repetido, gera outro valor aleatorio.
                            array[i] = Math.floor((Math.random()*9)+1) ;
                            return f(array, naoRepeti); // Chama uma função passando um array e ela mesma.
                        }
                    }
                }
                return array;
            } else {
                return false;
            }
        }

        // Gera um array aleatorio com valor de 1 ou 9.
        function arrayAleatorio(n) {
            // Devemos receber um valor que será o tamanho do array.
            var array = [];
            for(var i = 0; i < n; i++) {
                array[i] = Math.floor((Math.random()*9)+1);
            }
            return array;
        }

        // Devemos chamar naoRepeti e passar um array e uma função (ela mesmo).
        console.log(naoRepeti(arrayAleatorio(10),naoRepeti));
        </script>
    </body>
</html>

Ops me desculpem, passei um exemplo que eu estava testando. Porfavor mudem o valor do arrayAleatorio para um valor igual ou menor que 9.

Por exemplo:

<!DOCTYPE html>
<html>
    <head>
        <title>Logica Programação</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <script>
        // Não deixa os valores de um array se repetir
        function naoRepeti(array, f) {
            if(array instanceof Array && array.length <= 9) {
                for(var i = 0; i < array.length; i++) {
                    for(var j = (i+1); j < array.length; j++){
                        if(array[i] == array[j]) {
                         // Essa função se houver numeros repetido, gera outro valor aleatorio.
                            array[i] = Math.floor((Math.random()*9)+1) ;
                            return f(array, naoRepeti); // Chama uma função passando um array e ela mesma.
                        }
                    }
                }
                return array;
            } else {
                return false;
            }
        }

        // Gera um array aleatorio com valor de 1 ou 9.
        function arrayAleatorio(n) {
            // Devemos receber um valor que será o tamanho do array.
            var array = [];
            for(var i = 0; i < n; i++) {
                array[i] = Math.floor((Math.random()*9)+1);
            }
            return array;
        }

        // Devemos chamar naoRepeti e passar um array e uma função (ela mesmo).
        console.log(naoRepeti(arrayAleatorio(9),naoRepeti));
        </script>
    </body>
</html>
solução!

Fabio, você pode estar verificando se o numero sorteado ja existe no array, caso exista mande gerar outro.

numeroSorteado = Math.round(Math.random() * 100);
if (numerosSorteados.includes(numeroSorteado))
  continue;
numerosSorteados.push(numeroSorteado);

Espero ter ajudado

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software