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

Dura recursividad

Hola, me pasa esto, las primeras veces que se genera el numero secreto, todo bien, pero como a la 4 o 5ta vez en la consola salen hasta 3 o 4 númerossecretos repetidos, ( el último número que sale siempre es el número secreto), pero es bastante extraño. Igual me permite jugar las 10 veces pero salen muchos números en la consola. Este es mi código.
let numeroSecreto = 0;
let intentos = 0;
let listaNumerosSorteados= [];
let numeroMaximo=10;
//console.log(numeroSecreto);
function asignarTextoElemento (elemento, texto){
let elementoHTML = document.querySelector(elemento);
elementoHTML.innerHTML= texto;
return;
}
function verificarIntento(){
let numeroUsuario = parseInt(document.getElementById('valorUsuario').value);
//console.log(typeof(numeroUsuario));
//console.log(typeof(numeroSecreto));
// console.log(numeroUsuario);
// console.log(intentos);

if (numeroUsuario===numeroSecreto){
    asignarTextoElemento('p',`Acertaste el Numero secreto¡ en ${intentos} ${(intentos===1)? 'vez':'veces'}`);
    document.getElementById('reiniciar').removeAttribute('disabled');
}
else{
    //si el usuario no acierta
    if(numeroUsuario>numeroSecreto){
        asignarTextoElemento('p','El numero secreto es menor');
    }
    else{
         asignarTextoElemento('p','El numero secreto es mayor');
    }
    intentos++;
    limpiarCampo();
}

return;


  

}
function limpiarCampo(){

document.querySelector('#valorUsuario').value='';
// esto es forma normal, en la parte de arriba esta en codigo pequeño
//let valorCampo=document.querySelector('#valorUsuario');
//valorCampo.value='';
}

function generarNumeroSecreto() {
let numeroGenerado = Math.floor(Math.random()*numeroMaximo)+1;
console.log(numeroGenerado);
console.log(listaNumerosSorteados);
//si ya sorteamos todos los numeros
if(listaNumerosSorteados.length == numeroMaximo){
asignarTextoElemento('p', 'Ya se sortearon todos los numeros posibles');

} else{ 
// Si el numero generado esta incluido en la lista
    if(listaNumerosSorteados.includes(numeroGenerado)){
    return generarNumeroSecreto();
    } else{
    listaNumerosSorteados.push(numeroGenerado);
    return numeroGenerado;
    }    
}

}

function condicionesIniciales(){
asignarTextoElemento('h1','Juego del Numero secreto!');
asignarTextoElemento('p',Ingrese un numero del 1 al ${numeroMaximo});
numeroSecreto = generarNumeroSecreto();
intentos=1;
// console.log(numeroSecreto);
}
function reiniciarJuego(){
//esto limpia el campo
limpiarCampo();
//indicar el numero intervalo del 1 al 10
//generar el numero aleatorio
//inicialiar el numero de intentos
condicionesIniciales();
//desabilitar el boton de nuevo juego
// document.getElementById('reiniciar').setAttribute('disabled','true');
document.querySelector('#reiniciar').setAttribute('disabled','true');

}
condicionesIniciales();

2 respuestas
solución!

Hola LUIS ALBERTO HUAMANI CAHUANA, la razon de esto es por que donde estas usando el console.log() en tu funcion de generar numero secreto, como esta al principio de la funcion, esos console.log del numero secreto y listaNumerosSorteados siempre se van a ejecutar en cada llamada incluso cuando sea una llamada recursiva, recordando que en la logica que hicimos en el curso, la funcion se va a llamar a si misma siempre y cuando que el numero secreto generado se encuentre en la lista de los numeros sorteados, por ejemplo, cuando se llama la funcion las primeras 5 veces no hay tanto conflicto por que la probabilidad de que se generen numeros que ya pertenezcan a la lista de numeros sorteados es baja por eso no se imprimen tantos numeros en tu consola, pero cuando la probabilidad de que el programa genere numeros que ya esten en la lista es mayor apartir de 5 numeros generados entonces cuando el programa genera un numero que ya esta en la lista va a volver a llamar a la funcion generarNumeroSecreto a si misma imprimiendo en la consola el nuevo numero generado y la lista de numeros sorteados, esto se va a repetir hasta que genere un numero que no este incluido en la lista, si quieres que no sea tan molesto esos console.log te recomiendo que muevas esas 2 lineas justo despues de que el numero generado haya sido correctamente agregado a la lista, es decir en la parte falsa donde se verifica que el numero este en la lista, espero haberte ayudado, a seguir en este hermoso camino de la programacion

Mucho mas claro muchas gracias!