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

[Dúvida] Por que preciso usar o var achou = false? Qual a função dela dentro do código?

O principal ponto que não entendi nessa aula é o uso dessa variável booleana que o professor insere. Se ela é apenas uma variável armazenando o valor false ou true, por que pode ser usada como uma condição na hora de dar o ´push´ no número aleatório?? Não consegui entender

while(numero <= quantidade) {

        let numeroAleatorio = sortearNumero();
        let achou = false;

        if(numeroAleatorio != 0) {

          for(i = 0; i < segredos.length; i++) {

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

          if(achou == false) {

            segredos.push(numeroAleatorio);
            numero++;
          }

        }
      }
4 respostas

Você inicia com o valor de false, para quando cair em um "loop" que o retorno seja true (numero esteja certo), ele pare de rodar o programa. repare que assim que o valor é =true tem um break.

O break já não serve pra parar o loop? Pq não dá certo simplesmente fazer com que depois de entrar no loop ´for´ e ele não ache um número repetido do array, só dar o push no número? Tipo

while(numero <= quantidade) {

        let numeroAleatorio = sortearNumero();

        if(numeroAleatorio != 0) {

          for(i = 0; i < segredos.length; i++) {

            if(segredos[i] == numeroAleatorio) {
                /* tira o achou */
              break;
              }
            }

            /* se cair no loop e não achar, pq n vai ignorar e depois adicionar no array? */

            segredos.push(numeroAleatorio);
            numero++;          

        }
      }

Ana, boa noite!

O break é o comando para que o programa saia do loop. Mas, enquanto o número sorteado não for igual ao chute, ele vai receber mais um e queimar a tentativa. É para isso que "achou" recebe o boleano false, isso indica que o programa não pode parar até que o número sorteado seja igual ao chute e o "achou" receba true. O exemplo que vc passou, não tem esse elemento que serve de parâmetro de comparação de verdadeiro ou falso.

espero ter conseguido explicar.

solução!

Olá, Ana! Esse break apenas interrompe o laço "for(" quando ele encontra o numero duplicado. O que vc postou executaria sempre as linhas "segredos.push(numeroAleatorio)" e o "numero++;" mesmo havendo numero duplicado.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade