Solucionado (ver solución)
Solucionado
(ver solución)
11
respuestas

No entiendo que falla

Por alguna razon al probar el programa colocando cualquiera de los numeros correctos me indica que acerte y seguido a eso que erre, no se que es lo que esta mal en el codigo.

<button>Verificar si acertó el secreto</button>

<script>
    //var secreto=Math.round(Math.random()*10);
    var secretos=[3,5,7,9];
    var input=document.querySelector("input");
    input.focus();

    function verificar() {
        var encontrado=false;
        for(var posicion=0;posicion<4;posicion++){
            if (parseInt(input.value)==secretos[posicion]) {
                alert("Usted acertó");
                encontrado=true;
                break;
            }

        }
        if (encontrado==false);{
            alert("Usted erró");
        }
        input.value="";
        input.focus();
    }

    var button=document.querySelector("button");
    button.onclick=verificar;

</script>
11 respuestas

Me pasa igual, me estoy muriendo mirando la falla y no la encuentro. Creo que tiene que ver con el break, pero no entiendo que es. Mi codigo es identico al tuyo, ojala que alguien nos diga que puede estar mal.

Deberia quedar asi

<meta charset="UTF-8">

<input/>
<button>Verificar si acertó con el secreto</button>

<script>
    //var secreto = Math.round(Math.random()*10); 

    var secretos = [3,5,7,9];



    var input = document.querySelector("input");
    input.focus();

    function verificar() {

        var encontrado = false;

        for(var posicion = 0; posicion < secretos.length; posicion++){

            if (parseInt(input.value) == secretos[posicion]) {

                alert("Usted acertó");
                encontrado = true;
                break; 

            }

        }

        if (encontrado == false) {

            alert("Uster erró");

        }

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

    } 

    var button = document.querySelector("button");
    button.onclick = verificar;


</script>

Un consejo: no uses break si quieres romper una función, mejor usa un "return;", cambia tu break por return; para que veas el cambio

Un consejo: no uses break si quieres romper una función, mejor usa un "return;", cambia tu break por return; para que veas el cambio

Me sirviooo! Gracias genio.

Igual me gustaria saber porque teniendolo igual que el video no me funcionaba.

El return arreglo el problema, pero me trajo otro: Ahora cada que acierta no aplica las lineas de input.value=""; input.focus(); Pero si lo aplica al errar.

Eso sucede por la naturaleza del return; de romper la función.

Cuando una función retorna algo, inmediatamente ese llamado a la función se rompe, quiere decir que el resto del código que viene después no se ejecutará, puedes simplemente pasar esas líneas de código a una parte que siempre se ejecute o duplicas código y lo pones antes del return; (aunque duplicar código ya es una muestra de que algo no está del todo bien y estamos haciendo malas prácticas, pero para empezar, allí tendrías una solución).

Les dejo la posible solución usando "break" , recordando que "break" rompe el ciclo de la iteración y el programa continua ejecutandose, en cambio "return" termina la función.

<meta charset="utf-8">

<input type="" name="">
<button>
    presionar
</button>
<script>
//var secreto=Math.round(Math.random()*10);

var secretos = [3, 5, 7, 9];

var input = document.querySelector("input");


function verificar() {

    var encontrado = false;



    for (var posicion = 0; posicion < 4; posicion++) {
        if (parseInt(input.value) == secretos[posicion]) {
            alert("Usted acertó");
            encontrado = true;
            break;
        }
        else {
            alert("Usted erró");
            input.focus();
            break;
        }

    }
    input.value = "";

}

var button = document.querySelector("button");
button.onclick = verificar;
</script>
</meta>

El return arreglo el problema, pero me trajo otro: Ahora cada que acierta no aplica las lineas de input.value=""; input.focus(); Pero si lo aplica al errar.

Es verdad, me paso lo mismo.

solución!

if (encontrado==false){ alert("Usted erró"); }Saludos, Veo que en la parte de if (encontrado==false);{ tienes un ; de mas, si lo quitas se soluciona

Quitar ese ; del false fue la solución, José muchas gracias.

Lo que tienes mal era ; del IF aun que ya vi que te lo comentaron jaja esos ; En programas mas grandes si que da un dolor de cabeza