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

Programa continua apenas alertando erro.

Criei uma função para analisar os números do array e comparar com o input, mas ele ainda alerta que está errado

<meta charset="UTF-8">

<input/>
<button>Compare com o número que estou pensando!</button>

<script>
    function sorteia(){
        return Math.round(Math.random() * 10);
    }
    function numeroSegredos(quantidade){
        var segredos = []
        var numero = 1

        while(numero <= quantidade){
            var numerosAleatorios = sorteia();
            var existe = false;

            for(var posicao = 1; posicao < segredos.length; posicao++){
                if(segredos[posicao] == numerosAleatorios){
                    existe = true;
                    break;
                }
            }
            if(existe == false){
                segredos.push(numerosAleatorios)
                numero++
            }
        }
        return segredos
    }
     var segredos = numeroSegredos(4);
    var input = document.querySelector("input");

    function numeroVerificado(){
        var numerosParaAnalisar = segredos
        for(var posicao = 0;posicao < segredos.length;posicao){
            if(numerosParaAnalisar[posicao] == input){ 
                break
                alert("Parabéns! Você acertou!")
            }else{
                alert("ERROU!!")
                posicao++
            }
        }
    }
    console.log(segredos)
    var button = document.querySelector("button");
    button.onclick = numeroVerificado
</script>
6 respostas

Eu ajustei a tag do campo input atribuindo um ID e ajustei a função de numeroVerificado. O código ficou assim:

<meta charset="UTF-8">

<input type="text" id="numero_digitado"/>
<button>Compare com o número que estou pensando!</button>

<script>
    function sorteia(){
        return Math.round(Math.random() * 10);
    }
    function numeroSegredos(quantidade){
        var segredos = []
        var numero = 1

        while(numero <= quantidade){
            var numerosAleatorios = sorteia();
            var existe = false;

            for(var posicao = 1; posicao < segredos.length; posicao++){
                if(segredos[posicao] == numerosAleatorios){
                    existe = true;
                    break;
                }
            }
            if(existe == false){
                segredos.push(numerosAleatorios)
                numero++
            }
        }
        return segredos
    }
     var segredos = numeroSegredos(4);
    var input = document.querySelector("#numero_digitado");

    function numeroVerificado(){
        var numerosParaAnalisar = segredos;
        var acertou = false;
        for(var posicao = 0;posicao < segredos.length;posicao++){
            if(numerosParaAnalisar[posicao] == input.value){ 

                acertou = true;
            }
        }
        if (acertou){
            alert("Parabéns! Você acertou!");
        } else {
            alert("ERROU!!");
        }    
    }
    console.log(segredos)
    var button = document.querySelector("button");
    button.onclick = numeroVerificado
</script>
solução!

Oi meu aluno! Parabéns por ter batalhado por uma solução. Esta quase 100%! São dois detalhes que impediram seu programa de funcionar corretamente. Vou apontá-los.

O primeiro e esse:

if(numerosParaAnalisar[posicao] == input){

A variável input equivale a caixinha do seu formulário, mas para sabermos seu valor precisamos fazer input.value.

if(numerosParaAnalisar[posicao] == input.value){

É uma variável um tanto diferente. Ao evoluir em JavaScript você aprenderá que ela é um objeto.

Agora, o segundo problema é a localização do break. Olhe como esta:

if(numerosParaAnalisar[posicao] == input){ 
                break
                alert("Parabéns! Você acertou!")
}else{
                alert("ERROU!!")
                posicao++
}

Você deu break antes de exibir a mensagem, sendo assim, seu programa sairá do loop antes dela ser exibida.

Solucionando fica assim:

            if(numerosParaAnalisar[posicao] == input.value){ 
                alert("Parabéns! Você acertou!")
                break        
            }else{
                alert("ERROU!!")
                posicao++
            }

Isso já é suficiente para seu código funciona. No entanto, para ficar ainda melhor, não é necessário criar a variável numerosParaAnalisar, pois ela é idêntica à segredos. Você pode usar segredos em seu lugar. Ficando assim:

        for(var posicao = 0;posicao < segredos.length;posicao++){
            if(segredos[posicao] == input.value){ 
                alert("Parabéns! Você acertou!")
                break        
            }else{
                alert("ERROU!!")
                posicao++
            }
        }
    }

Tranquilo? Se tiver tudo certo, não esqueça de marcar minha resposta como solução para que eu possa focar outros alunos que também possuem dúvidas.

Sucesso bom estudo!

Ah, uma melhoria que você pode fazer é fazer com que ele exiba apenas uma vez errou, porque do jeito que esta, ele exibirá errou para cada item da lista que não for igual ao valor digitado. Mas primeiro faz funcionar o código com as propostas de mudança.

Muito obrigado gente, eu tinha esquecido do detalhe que o input não converte instantaneamente em numero e sim em uma string

O input é uma área de memória que é um objeto e objeto podem ter propriedades e uma dela é o .value. É através dela que você pede para o objeto o valor que ele armazena.

Hm, entendi! Obrigado Flávio.