Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

176
Vistas
¿Por qué no funciona mi ciclo de adivinación de números?

Soy totalmente nuevo en Javascript. Acabo de aprender sobre el bucle WHILE y estoy tratando de crear un juego simple de adivinanzas de números, pero parece que no funciona. Se supone que el programa funciona así: el jugador tiene 3 intentos para adivinar el número aleatorio del 1 al 5. Si se adivina mal, una alerta da una pista de si el número es mayor o menor. Si se acierta, el programa felicita al jugador y sale del bucle. Sin embargo, la condición " ( guessCounter < 3 || +guess !== randomNumber ) " no parece funcionar. Tal vez sea otra cosa. Se agradece cualquier ayuda para entender por qué no funciona. Gracias.

 // Generate random number const randomNumber = Math.floor( Math.random() * 5 ) + 1; // Ask user for guess let guess = prompt( "Guess a number between 1-5." ); // Create guessCounter let guessCounter = 1; // Allow only 3 guesses. Each wrong guess will hint if the random number is higher or lower. If guessed correctly, congratulate player and exit loop. while ( guessCounter < 3 || +guess !== randomNumber ) { if ( +guess < randomNumber ) { alert(`You did not guess correctly. The number is higher.`); guessCounter+= 1; guess = prompt("Try again."); } else if ( +guess > randomNumber ) { alert(`You did not guess correctly. The number is lower.`); guessCounter+= 1; guess = prompt("Try again."); } else { alert(`You guessed the correct number. Congrats.`); } };
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

 // Generate random number const randomNumber = Math.floor(Math.random() * 5) + 1; // Ask user for guess let guess = prompt("Guess a number between 1-5."); // Create guessCounter let guessCounter = 1; // Allow only 3 guesses. Each wrong guess will hint if the random number is higher or lower. If guessed correctly, congratulate player and exit loop. while (guessCounter < 3) { if (guess < randomNumber) { alert(`You did not guess correctly. The number is higher.`); ++guessCounter; guess = prompt("Try again."); } else if (guess > randomNumber) { alert(`You did not guess correctly. The number is lower.`); ++guessCounter; guess = prompt("Try again."); } else { guessCounter = 3; } } if (+guess === randomNumber) alert(`You guessed the correct number. Congrats.`); else alert(`You did not guess the correct number.`);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Ok, veamos cómo podemos depurar este código.

Primero, debemos deshacernos de cualquier aleatoriedad porque la depuración es mucho más fácil cuando se trata de valores predecibles o constantes:

 // Generate random number const randomNumber = 4;

Bien, sabemos que el número aleatorio correcto en nuestra sesión de depuración siempre será 4.

Ingresemos el número correcto en la primera ejecución:

Comportamiento observado:

  • Introduzca el número: 4
  • You guessed the correct number. Congrats.
  • Ingrese el número: 4 (otra vez)
  • You guessed the correct number. Congrats.

Vaya, esto parece un bucle infinito. ¿Porqué es eso?

Echemos un vistazo más de cerca a la expresión que finalmente decide si el bucle continúa o no:

 while ( guessCounter < 3 || +guess !== randomNumber ) {

Podemos evaluar esas condiciones a mano porque sabemos:

1.) guessCounter se inicializa a 1 y

2.) guess es "4" , lo que significa +guess es 4 y randomNumber se fija en 4 .

A continuación rellenamos los valores:

 while ( 1 < 3 || 4 !== 4 ) {

1 < 3 nos da true y 4 !== 4 también nos da verdadero por lo que tenemos:

 while ( true || true ) {

Repitiendo lo mismo para el segundo "intento":

1.) el contador de guessCounter es 2

2.) guess es "4" , lo que significa +guess es 4 y randomNumber se fija en 4 .

Nos da:

 while ( 2 < 3 || 4 !== 4 ) {

Lo cual es equivalente a:

 while ( true || true ) {

Así que ya podemos señalar que la lógica no está funcionando según nuestras expectativas.

Sabemos que el bucle no debería continuar, pero lo hace.¹

Espero que esto le brinde un punto de partida sobre cómo depurar y corregir su código.

¹ Si se pregunta si puede "romper" un bucle en ejecución, sí puede hacerlo: vea romper para eso.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda