1
resposta

O que ha de errado com o meu codigo?

function gerarNumero() { 
  return Math.round(Math.random()* 10)
}

function funcao(A) {
  var numerosGerados= []
  var numeroAleatorio= gerarNumero()
  var contador1=0

  while(contador1<A) {
    var existe= false
        for(var posicao=0; posicao<numerosGerados.length; posicao++){
          if (numerosGerados[posicao]== numeroAleatorio){
            existe=true
               break
          }
        }
      if(existe== false) {
      numerosGerados.push(numeroAleatorio)
      contador1++
    }
  }
  return numerosGerados

}

    var segredos = funcao(9);
1 resposta

Olá Caio, tudo bem com você?

Então acredito que a sua lógica criou um loop infinito, e por isso não da certo, vou te mostrar:

O seu programa começa sorteando um valor:

var numeroAleatorio= gerarNumero()

Vamos supor que numeroAleatorio equivale a 8, dessa forma iremos entrar no while e como não há nada em nosso array temos que:

if(existe== false) {
      numerosGerados.push(numeroAleatorio)
      contador1++
}

Pois bem, agora temos que o nosso array esta dessa maneira:

numerosGerados= [ 8 ]

E iremos para a segunda iteração do while e aqui está o problema, como não esta sendo sorteado um valor novo, nosso numeroAleatorio ainda equivale a 8, e dentro do nosso for, essa condição:

if (numerosGerados[posicao]== numeroAleatorio){

Será verdadeira, então colocamos existe = truee não aumenta o contador de iterações, e isso irá se repetir infinitamente, e por isso o seu código não funciona :)

Para corrigir é bem simples, basta colocar o nosso número aleatório para cada iteração do while ser gerado novamente dessa maneira:

while (contador1 < A) {
      var numeroAleatorio = gerarNumero()

E não teremos mais o loop infinito!

Abraços e Bons Estudos :)