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

Problemas com array

O instrutor no vídeo faz o código e ele funciona, porém, ele deixa todos os valores já definidos, eu fiz uma função que "r" que gera um número aleatorio e o retorna com o valor "a", sendo assim, a variável segredos passa a ser segredos = [r(), r(), r(), r()]. E também fiz uma função que verifica.

function verifica(a,b){

    if(a.value==b){
        alert("Acertou!");

    }else {

        alert("Errou!");
    }
    a.value = "";
    a.focus();
}

Na chamada da função verifica, passo passar o segredos (como segundo parametro) como segredos[i] ? i sendo o mesmo i do for que começa em 0, e é incrimentado em 1 a cada loop, o que acompanharia as posições do array.

Também tentei colocar um terceiro parâmetro na função, o parâmetro "c", e alterei o if(a.value==b) para if(a.value==b[c]), e declarei a função como verifica(input, segredos, i).

O nome das variáveis e parametros não estão nada semânticos, mas fiz a fim de testar se funcionava e queria fazer o mesmo programa que o instrutor, mas com menos valores já pré definidos no código, e buscando esses valores de funções.

Vou colar o código inteiro aqui. Aceito qualquer ajuda, até mesmo alguma linha de raciocinio que eu deva seguir, estou mexendo nesse código já há algum tempo, e minha cabeça já está meio confusa, então posso não estar pensando tão claramente e perdendo alguns detalhes importantes.

function verifica(a,b){

    if(a.value==b){
        alert("Acertou!");

    }else {

        alert("Errou!");
    }
    a.value = "";
    a.focus();
}

function r (){
    a = Math.round(Math.random() * 100);

    return a;
}


var buttonOk = document.querySelector("#ok");
var input = document.querySelector("input");

buttonOk.addEventListener("click", function(event){

    event.preventDefault();
    var input = document.querySelector("input");    
    var segredos = [r(), r(), r(), r()];
    console.log(segredos);

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

        verifica(input, segredos[i]);
    }
})

Esse é o código depois de muitas alterações, provavelmente há vários erros nele agora. Voltarei a mexer nele quando acordar, e posto uma versão melhor, talvez.

8 respostas

Que tal você alterar com os nomes semânticos primeiro? Veja também que menos código nem sempre é melhor quando compromete a legibilidade do código.

Aguardo a atualização

Não testei seu código ainda. Veja essa iinstrução

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

Fica mais fácil de ler assim

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

Veja que ficou um pouco menor. O que acha?

Olá Flavio, muito obrigado pelas respostas, vou fazer o que disse, e volto pra dizer se consegui solucionar meu problema.

Vou te dar um feedback do seu código ainda hoje. Só sugeri que você atualizasse para nomes mais semânticos. Eu olho do jeito que esta. Me aguarde. ..

O maior problema que estou tendo é: consigo criar o array com números aleatorios, mas não consigo passa-los para dentro do button, pensei em colocar a variavel dentro do botão, mas assim, acho que eu criaria um novo array a cada vez que clicasse. Porém, como vem um for depois, talvez isso funcione, pois o array sera criado e depois virá o loop. Mas gostaria de gerar o array antes de clicar no botão, assim eu poderia ver o array no console, para eu poder acertar e errar propositalmente a fim de testar o código.

Esses foram apenas alguns pensamentos que tive, tentarei implementa-los.

E estou aguardando, mas sem pressa haha, vou mexer em outros códigos enquanto isso :)

Obs: Já mudei os nomes para nomes mais semânticos, e realmente ficou melhor de ler o código.

solução!

Seu código funciona. Não entendi onde esta o problema. Você só queria uma recomendação de como escrevê-lo melhor, é isso? Bem, comparando com o que você aprendeu no curso e sua tentativa de isolar responsabilidades, é um salvo considerável. Há outras formas de se organizar, mas que nesse estágio inicial do curso demandaria de um conhecimento mais aprofundado da linguagem JavaScript. Isso você aprenderá nos próximos cursos caso queria seguir carreira de desenvolvedor JavaScript.

Para ver o array antes de clicar no botão você pode fazer assim:

<input/>
<button id="ok">Compare com o meu segredo!</button>

<script>
function verifica(a,b){
    alert(a.value);
    if(a.value==b){
        alert("Acertou!");

    }else {

        alert("Errou!");
    }
    a.value = "";
    a.focus();
}

function r (){
    a = Math.round(Math.random() * 100);

    return a;
}


var buttonOk = document.querySelector("#ok");
var input = document.querySelector("input");
var segredos = [10, r(), r(), r()]; // aqui!!!!!!
console.log(segredos);

buttonOk.addEventListener("click", function(event){

    event.preventDefault();
    var input = document.querySelector("input");    
    console.log(segredos);

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

        verifica(input, segredos[i]);
    }
})
</script>

Funciona ? Ok, vou rever o código e testar de novo, eu estava recebendo algumas mensagens de erro antes. E o console.log(segredos) mostraria o array normalmente ? Porque achei que a function dentro do addEventListener precisaria receber a variavel segredos de alguma forma para poder exibi-la corretamente.

Como voltarei a postar aqui, vou deixar a discussão em aberto por enquanto, mas logo marcarei uma resposta como solução.

Vou revisar o código, muito obrigado pela ajuda e voltarei com uma resposta em breve!

Está funcionando, não sei o que estava dando errado antes, provavelmente era o sono me atrapalhando. Agora ocorreu tudo certo.

Mas tenho uma dúvida, por que não consigo colocar um break dentro do if na função verifica ?

Recebo este erro Uncaught SyntaxError: Illegal break statement

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software