1
resposta

Como isso é possível ? Professor rompeu a Matrix?

Boa noite pessoal, esse é um trecho do codigo do professor, que tem como função retornar numeros que nao sejam "0" e numeros diferente dos ja armazenados.

E esse trecho de codigo é perfeitamente funcional, o que me deixa perplexo é como é possivel esse trecho ser funcional ?

Sendo que caso o numero sorteado seja "0" o progama passaria direto pelo 1º "If" e faria o 2º "if", sem alterar o valor da flag "achou" que foi previamente declarada como "false", logo ele armazenaria o numero "0" na variavel "segredo" tornando o programa não-funcional.

function sorteiaNumeros(quantidade) {

        var segredos = [];

        var numero = 1;

        while(numero <= quantidade) {

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

              if (numeroAleatorio !== 0) {
                     for(var posicao = 0; posicao < segredos.length; posicao++) {

                           if(segredos[posicao] == numeroAleatorio){
                                achou = true;
                                break;
                           }

                     }

                     if (achou == false) {
                           segredos.push(numeroAleatorio);
                           numero++;
                     }
              }

        }

        return segredos;

    }
1 resposta

Olá, Everton, tudo bem?

Você quer saber como o número 0 nunca é adicionado, certo?

Vou deixar aqui o código desse if para ficar mais fácil de explicar:

              if (numeroAleatorio !== 0) {
                     for(var posicao = 0; posicao < segredos.length; posicao++) {

                           if(segredos[posicao] == numeroAleatorio){
                                achou = true;
                                break;
                           }

                     }

                     if (achou == false) {
                           segredos.push(numeroAleatorio);
                           numero++;
                     }
              }

Perceba que toda a lógica de adicionar ou não o novo número sorteado está dentro do if (numeroAleatorio !== 0). O bloco do if (achou == false) também está dentro do if mais "externo", ou seja, se o número sorteado for 0, a verificação numeroAleatorio !== 0 será false e nenhuma parte desse código acima será executada. Assim, o bloco do if (achou == false) também não é executado e o número 0 não é adicionado.

Espero ter esclarecido sua dúvida! Abraços e bons estudos :)