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

dúvida com arrays.

Olá gente, acabei de terminar o curso Lógica de Programação 1 e queria deixar o link pro meu projetinho de casa de apostas feito no codipen.

https://codepen.io/Ana2812/pen/VwWJQaw

Além disso tenho uma dúvida. Graças ao console.log(numerosPensados) da linha 59, o computador me mostra sempre os números sorteados, de 1 a 10 e sem repetição. Só que o length do meu array está variando, as vezes aparecem 3 números, as vezes 2 e algumas vezes só 1. O que eu tenho que fazer para que sempre 3 números sejam selecionados?

2 respostas
solução!

Olá, Ana, tudo bem?

Nos desculpe a demora a responder.

Que bacana que você fez um projeto pessoal! Ficamos felizes, essa é uma excelente forma de praticar e fixar nossos conhecimentos.

O erro está nesse código dentro da função sorteiaNumero:

for(var numeros = 1; numeros <= quantidade; numeros++){

            var numeroAleatorio = sorteia();
            var achou = false;

            if(numeroAleatorio !== 0){


            for(var posição = 0; posição < numerosPensados.length; posição++){

                if(numerosPensados[posição] == numeroAleatorio){

                    achou = true;
                    break;
                }
            } 

            if (achou == false){
               numerosPensados.push(numeroAleatorio); 
            }
           } 

O problema basicamente é que no for mais "externo", você está usando a instrução numeros++. Isso é um problema porque mesmo quando o novo número não é adicionado, essa instrução é executada.

Ou seja, todo esse código do for é executado exatamente 3 vezes, e nem sempre o número é adicionado em cada uma dessas vezes, então podem acabar sendo adicionados apenas 1 ou 2.

Para corrigir, podemos trocar o for por um while. Assim, moveremos a instrução var numeros = 1 para antes do while e a instrução numeros++ apenas quando o número realmente for adicionado na lista, ou seja, dentro do bloco if (achou == false). O código completo da função sorteiaNumero ficará assim:

function sorteiaNumero(quantidade){

        var numerosPensados = [];
        var numeros = 1; 
        while(numeros <= quantidade){

            var numeroAleatorio = sorteia();
            var achou = false;

            if(numeroAleatorio !== 0){


            for(var posição = 0; posição < numerosPensados.length; posição++){

                if(numerosPensados[posição] == numeroAleatorio){

                    achou = true;
                    break;
                }
            } 

            if (achou == false){
               numerosPensados.push(numeroAleatorio); 
               numeros++;
            }
           } 
        }

        return numerosPensados
        };

Espero ter ajudado! Abraços e bons estudos :)

Funcionou sim, obrigado!!!