Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

Desafio final.

Alguém poderia me informar onde eu estou errando?

<meta charset="UTF-8">

<input type="text" id="numero"/>
<input type="submit" value="adicione e verifique no bingo!" id="adivinhar"/>

<script> 
 var numerosSorteados= function(){
 var n1=math.floor(math.random() * 60);
 var n2=math.floor(math.random() * 60);
 var n3= math.floor(math.random() * 60);
 var n4= math.floor(math.random() * 60);
 var n5= math.floor(math.random() * 60);
 var n6= math.floor(math.random() * 60);
 var sorteados=[n1,n2,n3,n4,n5,n6];
 };

 var botaoClicado = function(){
    var numeroUsuario= document.getElementById("numero");
    for(var i=0; i < numerosSorteados().length; i=i+1)
    if(numeroUsuario.value == numerosSorteados()){
    break;
    alert("Os parabéns você acertou os numeros do bingo");
    }else{
     alert("você não ganhou no bingo");
    numeroUsuario.push(numero);
    console.log(numerosSorteados());
     }
     }
  var botaoadivinhar = document.getElementById("adivinhar");
  botaoadivinhar.onclick = botaoClicado;
 </script>
enter code here
11 respostas

I ae Rodrigo

Onde está:

if(numeroUsuario.value == numerosSorteados()){
    break;
    alert("Os parabéns você acertou os numeros do bingo");

Troca por:

if(numeroUsuario.value == numerosSorteados()){
    alert("Os parabéns você acertou os numeros do bingo");
    break;

Você tem que dar break, depois de mostrar a mensagem na tela, senão ele vai sair do for ignorando tudo o que vem depois dele.

Então martin da erro exatamente neste ponto. "var n1= math.floor(math.random() * 60);".

Cola aqui mensagem de erro que aparece pra você.

martin vc tem skyp ? pra nois comversa sobre esses curso um ajudando o outro etc.

Além do break, você está usando math ao invés de Math, precisa colocar em maiúsculo.

Martin, Cara você pode criar o código como fez, mas imagine que fossem 900 números sorteados! A ideia aqui é lógica, então aproveita os loops e ifs!

var sorteados = []; for( var i = 0; i < 6; i++ ){ var numero = Math.round(Math.random() * 59 + 1) if( sorteados[i] == numero ) { console.log( numero + ' já sorteado!'); } else { sorteados[i] = numero; } }

Putz, ele não deixou a indentação eheheh

solução!

Além do que comentaram acima, existem alguns problemas adicionais, como um erro clássico de comparação de valor com array diretamente e diversas invocações do método de sorteio desnecessariamente e que desconfiguram o jogo. Eu fiz uma resposta bem detalhada a respeito desse desafio final em outra discussão, e colarei aqui com algumas modificações para lhe ajudar:

Devemos criar o array de números inteiros sorteados, utilizando a função Math.random() em conjunto com a função Math.round() aprendidas durante o curso. Então para facilitar podemos criar uma função que sorteie os seis número aleatórios e nos retorne o array, ficando assim:

  var sorteiaNumeros = function() {
    var loteria = [];
    // adicionei uma condicao para garantir numeros nao repetidos
    while (loteria.length < 6) {
      var sorteado = Math.round(Math.random() * 60);
      var repetido = false;
      for (var i = 0; i < loteria.length; i++) {
        if (loteria[i] == sorteado) {
          repetido = true;
        }
      }
      if (!repetido) { //se nao for repetido adiciona
        loteria.push(sorteado);
      }
    }
    return loteria;
  }

Sua função do botão sorteia novos números toda vez que é invocada, além disso, a comparação de número com array diretamente nunca dará certo, portanto, separando responsabilidades, apenas pergunte ao usuário 6 vezes pelos números e retorne eles, em uma função assim:

  var perguntaNumeros = function() {
    var palpites = [];
    // adicionei condicao para garantir numeros distintos do usuario
    var i = 1;
    while (palpites.length < 6) {
      // lembre-se que o prompt retorna string por isso transformamos em int
      var numero = parseInt(prompt("Digite o seu palpite numero " + i + ":"));
      var repetido = false;
      for (var j = 0; j < palpites.length; j++) {
        if (palpites[j] == numero) {
          repetido = true;
        }
      }
      if (!repetido) { //se nao for repetido adiciona
        palpites.push(numero);
        i++;
      } else {
        alert("Numero repetido!");
      }
    }
    return palpites;
  }

Agora, precisamos validar se o usuário acertou, portanto fazemos uma função que retorna o numero de acertos, porém de maneira parametrizada, afim de poder ser reutilizada para diversas combinações:

  var verificarResultado = function(loteria, palpites) {
    var acertos = 0;
    for (var i = 0; i < loteria.length; i++) {
      for (var j = 0; j < palpites.length; j++) {
        if (palpites[j] == loteria[i]) {
          acertos++;
        }        
      }
    }
    return acertos;
  }

Agora criamos uma função que utiliza as demais para executar o jogo e associamos ao botão:

  var jogar = function() {
    var loteria = sorteiaNumeros();
    var palpites = perguntaNumeros();
    console.log("sorteados: " + loteria);
    console.log("palpites: " + palpites);
    var acertos = verificarResultado(loteria, palpites);
    if (acertos == 6) {
      alert("Parabens, voce ganhou!");
    } else {
      alert("Que pena, você acertou " + acertos + " numeros. tente de novo!");
    }
  }
  var botaoJogar = document.getElementById("jogar");
  botaoJogar.onclick = jogar;

Colocando tudo em um bloco só para facilitar a cópia temos como resultado:

<input id="jogar" type="submit" value="Jogar!" />
<script>
  var sorteiaNumeros = function() {
    var loteria = [];
    // adicionei uma condicao para garantir numeros nao repetidos
    while (loteria.length < 6) {
      var sorteado = Math.round(Math.random() * 60);
      var repetido = false;
      for (var i = 0; i < loteria.length; i++) {
        if (loteria[i] == sorteado) {
          repetido = true;
        }
      }
      if (!repetido) { //se nao for repetido adiciona
        loteria.push(sorteado);
      }
    }
    return loteria;
  }
  var perguntaNumeros = function() {
    var palpites = [];
    // adicionei condicao para garantir numeros distintos do usuario
    var i = 1;
    while (palpites.length < 6) {
      // lembre-se que o prompt retorna string por isso transformamos em int
      var numero = parseInt(prompt("Digite o seu palpite numero " + i + ":"));
      var repetido = false;
      for (var j = 0; j < palpites.length; j++) {
        if (palpites[j] == numero) {
          repetido = true;
        }
      }
      if (!repetido) { //se nao for repetido adiciona
        palpites.push(numero);
        i++;
      } else {
        alert("Numero repetido!");
      }
    }
    return palpites;
  }
  var verificarResultado = function(loteria, palpites) {
    var acertos = 0;
    for (var i = 0; i < loteria.length; i++) {
      for (var j = 0; j < palpites.length; j++) {
        if (palpites[j] == loteria[i]) {
          acertos++;
        }        
      }
    }
    return acertos;
  }
  var jogar = function() {
    var loteria = sorteiaNumeros();
    var palpites = perguntaNumeros();
    console.log("sorteados: " + loteria);
    console.log("palpites: " + palpites);
    var acertos = verificarResultado(loteria, palpites);
    if (acertos == 6) {
      alert("Parabens, voce ganhou!");
    } else {
      alert("Que pena, você acertou " + acertos + " numeros. tente de novo!");
    }
  }
  var botaoJogar = document.getElementById("jogar");
  botaoJogar.onclick = jogar;
</script>

O legal é ir separando as necessidades do seu programa e modularizando em funções. Caso suas dúvidas tenham sido esclarecidas, peço que selecione a resposta que melhor lhe ajudou e marque como resolvido, a fim de evitar postagens a mais desnessárias. Obrigado!

Meu programa tem dado erro nao sei pq...

no developer tool do chrome aparece isso...

VM197:63 GET https://nikkomsgchannel/e?001c0025005900200046004b001d0055005c0057005b00260…21005b002a0047001e002400590046005b0008002f005a0028005d002c005d0051002e005a bingo.html:63 sorteados: 15,31,53,57,14,35 bingo.html:64 palpites: NaN,NaN,NaN,NaN,NaN,NaN VM197:50 GET https://nikkomsgchannel/e?001c0025005900200046004b001d0055005c0057005b00260…54002e005a004c00640050005b00440058007c005d002a005d0028005c0056002b005a0058

var jogar = function() { var loteria = sorteiaNumeros(); var palpites = perguntaNumeros(); console.log("sorteados: " + loteria); console.log("palpites: " + palpites); var acertos = verificarResultado(loteria,palpites); if (acertos == 6) { alert("Parebens, voce ganhou!"); }else{ alert("Que pena, você acertou " + acertos + "numeros. Tente de novo!"); } }

Cola o conteudo inteiro do arquivo entre ``` (aspas triplas) para termos idéia melhor do que está acontecendo.