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

ajuda no código

depois de assistir a aula, tentei atualizar o programa com o que foi passado, mas abrindo, acho que tem algo errado pq a página sequer carrega, sendo que usando o código da aula, funciona normal

segue o código (ignorem as anotações, coloquei pra me orientar melhor hehe)



 <meta charset="UTF-8">


<h1>adivinhação de numeros!</h1>
<h3>digite um numero entre 1 e 10</h3>
<input>
<button>será que voce acerta?</button>

<script> 

    function sorteia () {

            return Math.round(Math.random() * 10);

    }

    function sorteiaNumeros(n) {

        var segredos = [];// lista inicialmente vazia
        var numeroLista = 1;// contabilizar quantos numeros foram sorteados 


        while (numeroLista <= n);{ // deve ser repetido pela quantidade de numeros n definidos nos numeros secretos 

            var numeroAleatorio = sorteia();
            var achou = false;// inicialmente em false pq o numero vazio ainda nao foi encontrado pq nao foi verificado na lista de segredos

            if (numeroAleatorio !== 0); { // para nao termos 0 entre os segredos
                for(var posicao = 0; posicao < segredos.lenght; posicao = posicao + 1) { // para varrer a lista dos segredos e garantir que nao tenham numeros repetidos

                    if(segredos[posicao] == numeroAleatorio){ // se o numero aleatorio ja estiver na lista
                        achou = true;
                        break;// significa que o numero foi encontrado como repetido na lista, quebrando e reiniciando a repetição
                    }

                    if (achou == false) { // se o numero aleatorio nao estiver na lista
                        segredos.push(numeroAleatorio);
                        numeroLista = numeroLista + 1;// significa que o numero nao foi encontrado, portando nao era repetido
                                                        //assim o numeroAleatorio é inserido novamente e o numeroLista é incrementado para a proxima repetição do ciclo
                    }

                }

            }


        }

        return segredos;
    }


    var numerosSecretos = sorteiaNumeros(3);
    console.log(numerosSecretos);

    var botao = document.querySelector('button') ; // essa funcao captura algo do html e joga pro script
    var input = document.querySelector('input') ; // transformar em uma variavel deixa mais facil de trabalhar c isso
            input.focus() ;


            function verifica() {

                achou = false;// serve para verificar se o chute esta dentro da lista dos numeros secretos


                for (posicao = 0; posicao < numerosSecretos.lenght; posicao++){ // para varrer a lista dos numeros secretos e verificar se o chute estava certo ou nao


                    if(input.value == numerosSecretos[posicao]) { // se o chute estiver dentro da lista:

                        alert("Você ACERTOU!");
                        achou = true;// declaramos que achou agora é true, pois o numero é correspondente 
                        break;// para parar o resto dos pop ups 
                    } 

                    if(achou == false) { // se o numero nao for correspondente: 

                        alert('você ERROU!');

                    }

                }

                input.value = '' ;
                input.focus() ;

            }

            botao.onclick = verifica ; // tem que ser sem () pq se tiver de cara vai executar a função e aparecer o pop-up, e é preciso que ela seja chamada somente ON CLICK



</script>

edit: dei copy e paste no meu código mas saiu a página, ué?

edit2: agora consegui consertar :)

4 respostas
solução!

Oi Ryan

Tem alguns detalhes pra corrigir no código, não está abrindo porque seu programa está entrando em loop.

  • A propriedade de tamanho do array é length e você inseriu lenght nas 2 partes do código
  • No primeiro while você inseriu um ponto e virgula
  • O if (achou == false) { que faz o push no segredos precisa ficar fora do for

Aqui está o código com as alterações:

<meta charset="UTF-8" />

<h1>adivinhação de numeros!</h1>
<h3>digite um numero entre 1 e 10</h3>
<input />
<button>será que voce acerta?</button>

<script>
  function sorteia() {
    return Math.round(Math.random() * 10);
  }

  function sorteiaNumeros(n) {
    var segredos = []; // lista inicialmente vazia
    var numeroLista = 1; // contabilizar quantos numeros foram sorteados

    while (numeroLista <= n) {
      // deve ser repetido pela quantidade de numeros n definidos nos numeros secretos
      var numeroAleatorio = sorteia();
      var achou = false; // inicialmente em false pq o numero vazio ainda nao foi encontrado pq nao foi verificado na lista de segredos

      if (numeroAleatorio !== 0);
      {
        // para nao termos 0 entre os segredos
        for (
          var posicao = 0;
          posicao < segredos.length;
          posicao = posicao + 1
        ) {
          // para varrer a lista dos segredos e garantir que nao tenham numeros repetidos

          if (segredos[posicao] == numeroAleatorio) {
            // se o numero aleatorio ja estiver na lista
            achou = true;
            break; // significa que o numero foi encontrado como repetido na lista, quebrando e reiniciando a repetição
          }
        }
        if (achou == false) {
          // se o numero aleatorio nao estiver na lista
          segredos.push(numeroAleatorio);
          numeroLista = numeroLista + 1; // significa que o numero nao foi encontrado, portando nao era repetido
          //assim o numeroAleatorio é inserido novamente e o numeroLista é incrementado para a proxima repetição do ciclo
        }
      }
    }

    return segredos;
  }

  var numerosSecretos = sorteiaNumeros(3);
  console.log(numerosSecretos);

  var botao = document.querySelector('button'); // essa funcao captura algo do html e joga pro script
  var input = document.querySelector('input'); // transformar em uma variavel deixa mais facil de trabalhar c isso
  input.focus();

  function verifica() {
    achou = false; // serve para verificar se o chute esta dentro da lista dos numeros secretos

    for (posicao = 0; posicao < numerosSecretos.length; posicao++) {
      // para varrer a lista dos numeros secretos e verificar se o chute estava certo ou nao

      if (input.value == numerosSecretos[posicao]) {
        // se o chute estiver dentro da lista:

        alert('Você ACERTOU!');
        achou = true; // declaramos que achou agora é true, pois o numero é correspondente
        break; // para parar o resto dos pop ups
      }

      if (achou == false) {
        // se o numero nao for correspondente:

        alert('você ERROU!');
      }
    }

    input.value = '';
    input.focus();
  }

  botao.onclick = verifica; // tem que ser sem () pq se tiver de cara vai executar a função e aparecer o pop-up, e é preciso que ela seja chamada somente ON CLICK
</script>

Parabéns pelo empenho nos estudos!

Continue praticando e qualquer dúvida pode contar com a gente.

entedi, valeu!! mas nesse caso pq o if (achou == false) { tem que ficar fora do for? tinha escrito assim pq pensei que essa parte que faria a leitura do array pra definir se ia ter o push ou não

Oi Ryan

O for nesse caso é só pra verificar se o número gerado existe dentro do array, se existir ele marca que existe e não fará o push.

Esse push está associado ao while e não ao for dentro do while.

E outro ponto é que você deixando o push dentro do for ele nunca será executado já que o array será sempre vazio, ai não entrará no for por isso seu programa ficou em loop e travou o navegador, observe aqui a lógica:

for (
   var posicao = 0;
   posicao < segredos.length;  // segredos aqui é igual a 0 então já não atende esse verificação e não irá executar o for
   posicao = posicao + 1
) {

agora sim entendi, valeu!!