Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Duda] Necesito ayuda. no entiendo porque no funciona si cambiamos el parametro

Este es el codigo del profesor, lo descargue para ver si con ese codigo tambien me aparecia el mismo problema que con el que yo escribi.

los ciclos y arrays me han costado un poquito.

no entiendo porque en el argumento que el profesor pasa a la funcion sortearNumeros(4) . funciona con argumentos menores o iguales a 10. pero si ingresamos 11 o mas la pagina se bloquea.

segun mi logica no deberia bloquearse.

Esto es lo que yo entiendo: la funcion genera numeros aleatorios desde cero hasta 10. si queremos que genere 4 numeros diferentes, los crea sin problema, Ahora si yo le digo genereme 12 numeros aleatorios el programa no deberia genrear solo 10 numeros aleatorios diferentes ? asi yo le pida 12 o 20 numeros deberia generarme 1-2-3-4-5-6-7-8-9-10?

quien me ayuda a entender? ya llegue a mi tope con cilos y arrays.

gracias

<meta charset="UTF-8">

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

<script>
    function aleatorio() {

        return Math.round(Math.random()*10);

    }

    function sortearNumeros(cantidad) {
        var secretos = [];
        var contador = 1;

        while(contador<=cantidad){
            var numeroAleatorio = aleatorio();
            console.log(numeroAleatorio)
            var encontrado = false;

            if (numeroAleatorio != 0){
                for (var posicion = 0; posicion < secretos.length; posicion++) {
                    if (numeroAleatorio == secretos[posicion]) {
                        encontrado = true;
                        break;
                    }
                }

                if (encontrado == false) {
                    secretos.push(numeroAleatorio);
                    contador++;
                }

            }


        }    

        return secretos

    }


    var secretos = sortearNumeros(11);// aqui era 4

    alert(secretos);// aqui era console.log


    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>
2 respuestas
solución!

te explico un poco donde esta el problema y porque se traba el programa recuerda que el aleatorio regresa un numero decimal entre 0 y 1 y luego tu lo multiplicas por 10 aqui return "Math.round(Math.random()*10); " entonces todos los numeros estaran entre 1 y 10 es decir si tengo un aleatorio 0.3232 * 10 tendras 3. 232 te toma el entero porque lo redondeamos entonces ahora tu le dice dame 11 numero pero sigues multiplicando por 10 nunca termina de buscar, tendrias que decirle que te multiplique por 100 para tener 11 unidades o numeros, asi entonces aleatorio 0.3232 * 100 seria 32 x el redondeo y ahi entonces si podrias tener 11 o 12 o 99 si quieres mas de 2 digitos entonces multiplicas el aleatorio por 1000 y asi sucesivamente espero haber despejado tu duda

Hola, gracias, si tienes razon, por mas que leia el codigo no le veia la razon. gracias.