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] Validar duplicados con FOR en lugar de WHILE, me está dando problemas

Quise irme por mi propio camino y basándome en lo que decía el Instructor de VALIDAR DUPLICADOS, en lugar de hacerlo con WHILE justamente como se mostraba en el vídeo, yo lo intenté a través de FOR, funcionándome, claro, pero la cuestión es que los duplicados si bien sólo los toma una vez más no repite el loop para llenar los espacios del Array. Me gustaría saber cómo solucionarlo desde el FOR, puesto que él mismo lo comentaba en el vídeo, sin embargo era con la sentencia WHILE y lo solucionaba ingresando el "contador++" dentro del último "else".

Bloque de Código:

<meta charset="utf-8">

<h1>JUEGO SECRETO O.O</h1>

<input></input>
<button>Verificar acierto o.O</button>

<script>
function aleatorio(){
        return Math.round(Math.random()*10);
    }

    function sortearNumeros(length){

        var secretsF = [];

        for(var contador = 1;contador <= length; contador++){

            var numeroAleatorio = aleatorio();
            var encontrado = false;
            console.log(numeroAleatorio);

            for(var posicion = 0;posicion < secretsF.length; posicion++){
                if(numeroAleatorio == secretsF[posicion]){
                    encontrado = true;
                    break;
                }
            }
            if(encontrado == false){
                secretsF.push(numeroAleatorio);
            }        
        }
        return secretsF;
    }

    console.log();
    var secrets = sortearNumeros(4);
    var input = document.querySelector("input");
    input.focus();

    function verificar (){

        var encontrado = false;

        for(var posicion = 0; posicion < secrets.length; posicion++){
            if (parseInt(input.value) == secrets[posicion]){
                alert("Ud ha acertado.");
                encontrado = true;
                break;
            }
        }

        if(encontrado == false){
            alert("Ud ha errado.");
        }

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

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

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

2 respuestas

dejame ver si entendi el problema, en el caso donde se repite el 10, que se elimina el repetido y se vuelve un array de 3, te refieres a que cuando encuentre un numero duplicado, este mismo genere otro numero inmediatamente para sustituirlo y no quede ningun elemento eliminado?

solución!

El problema es en el segundo for de la función sortearNumeros. Al momento de encontrar un número repetido simplemente se rompe el ciclo y como estamos usando el for, el contador se sigue sumando. Una solución sería disminuir el contador al momoento de encontrar un repetido y así volver a buscar un nuevo número. Espero haberte ayudado:)

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