Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

[Bug] ¡Ayuda! "Número Secreto"

He estado ejecutando mi programa del ejercicio "Número Secreto" pero algo me está fallando, programe mi bucle para que hiciera 5 ciclos y al parecer se pasa, adjunto el código por si alguien me puede ayudar:

//Importación de módulos que contienen funciones frecuentemente utilizadas durante el curso
import {introduce, newLine} from '../../../modules/introduce.mjs';
import {getRandomNumber} from '../../../modules/randomNumber.mjs';

//Definición de funciones

//Función >getRandomNumbers< : Devuelve una matriz(array) de números aleatorios no duplicados
function getRandomNumbers(quantity) {
  let numbers = [];
  for(let i = 0, n = 0; i < quantity; i++) {
    do n = getRandomNumber(1, 10); while(numbers.includes(n));
    numbers.push(n);
  }
  return numbers;
}

//Función >verify< : Atiende al evento 'click' de un boton
function verify() {

  if(parseInt(input.value) == secret[sIndex]) {
    introduce("Usted acertó");
  } else {
    introduce("Usted erró");
  }

  input.value = "";
  input.focus();
  sIndex = sIndex == secret.length ? 0 : ++sIndex;

}

//Definición de variables globales

let secret = getRandomNumbers(5);
let sIndex = 0;
let input = document.querySelector("input");
let button = document.querySelector("button");

input.placeholder = "Ingrese un número";
input.focus();
button.addEventListener("click", verify);
2 respuestas

Revisa bien lo que estas haciendo en esta funcion:

function getRandomNumbers(quantity) {
  let numbers = [];
  for(let i = 0, n = 0; i < quantity; i++) {
    do n = getRandomNumber(1, 10); while(numbers.includes(n)); // AQUI PUEDE ESTAR EL ERROR
    numbers.push(n);
  }
  return numbers;
}

Podrías mejor hacer esto:

function getRandomNumbers(quantity) {
  let numbers = [];
  for(let i = 0, n = getRandomNumber(1, 10); i < quantity; i++) {
    while(numbers.includes(n))  numbers.push(n);
  }
  return numbers;
}

¡Hola Donaldo!

Muchas gracias por tu aportación, pero desafortunadamente el código que me sugieres no resuelve mi problema, de hecho lo agrava más, ahora ya no me genera la matriz de números.

//Función >getRandomNumbers< : Devuelve una matriz(array) de números aleatorios no duplicados
function getRandomNumbers(quantity) {

  let numbers = []; //Esta es la matriz

  for(let i = 0, n = 0; i < quantity; i++) {//Itera "quantity" veces, y en cada iteración añade un número aleatorio único a la matriz "numbers"

      //Esta instrucción obtiene un número aleatorio único ("no duplicado") y lo asigna a la variable "n" ;
    do n = getRandomNumber(1, 10); while(numbers.includes(n)); //De hecho trabaja bien;

    numbers.push(n);  //Está instrucción introduce el número obtenido a la matriz

  }

  return numbers; //Esta instrucción devuelve la matriz de números generada al finalizar la interación de "quantity" veces
}

¡Gracias por el apoyo!