Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Duda] Siempre me sale que el numero correcto debe ser 4 y mis arrays no tengo 4 !

<meta charset="UTF-8">

<input/>
<button>Adivina el numero</button>

<script>

    var secretos = [7,5,3,2];
    var input = document.querySelector("input");
    input.focus();

    function verificar () {

        var encontrado = false;

        for (var posicion = 0; posicion <= 3; posicion++) {

            if (input.value == secretos[posicion]) {
                alert("Usted acerto");
                encontrado = true;
                break;
            }

        }

        var posicion = 0;

        if (encontrado == false) {
        alert("Usted erro, el numero es " + secretos[posicion]);    
        }



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

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

</script>
1 respuesta

Lo que sucede es que la variable posicion solo esta definida dentro del ciclo for, como tu mensaje de que el usuario erró este fuera del ciclo no identifica correctamente una posicion dentro de tu arreglo,lo que aparece en tu mensaje alert es la magnitud del arreglo, es decir, cuantos datos contiene, no cuales son..

Una solución si solo quieres informar al usuario de uno de los posibles resultados dentro del arreglo es mejor poner el indice 0, pues así informas del primer valor, y no te generarias errores al poner otro número de indice en caso de que tu arreglo variara en tamaño :

if (encontrado == false) {
        alert("Usted erro, el numero es " + secretos[0]);    
 }

Ahora si lo que quisieras informar cuales eran todas las posibles respuestas, tendrías 2 opciones hacerlo manual o también en un ciclo:

Manual El mensaje se despliega en un solo alert.

if (encontrado == false){
    alert("Usted erró, el número correcto podía ser uno de los siguientes: " + secretos[0] + ", " + secretos[1] + ", " + secretos[2] + " ó " + secretos[3]);
}

Ciclo Se despliegan mensajes conteniendo cada respuesta

if (encontrado == false){

    alert("Usted erró, el número correcto podía ser uno de los siguientes:");

    for (contador = 0; contador <= 3; contador ++){
        alert(secretos[contador]);
    }

}