1
resposta

não sei pq n funciona

fiz o código para o sorteio, mas não está dando certo a função:

function sortear() {
    let quantidadeMin = document.getElementById('de').value;
    let limiteNumero = document.getElementById('ate').value;
    let quantidadeMax = document.getElementById('quantidade').value;
    let numeros = parseInt(Math.random() * limiteNumero + 1);
    let quantidadeNaLista = listaDeNumeros.length;
    if (!listaDeNumeros.includes(numeros)) {
        if (quantidadeNaLista >= quantidadeMin) {
            listaDeNumeros.push(numeros);
            if (quantidadeNaLista < quantidadeMax) {
                return sortear();
            } else {
                console.log(listaDeNumeros);
            }
        } else {
            return sortear();
        }
    } else {
        return sortear();
    }
}
1 resposta

Olá, Eduardo! Parece que você está enfrentando um problema com a sua função de sorteio. Vamos tentar resolver isso juntos.

Primeiramente, percebo que você está usando a função Math.random() para gerar números aleatórios. Essa função retorna um número entre 0 (inclusivo) e 1 (exclusivo). Quando você multiplica esse número pelo limiteNumero e adiciona 1, você está gerando um número entre 1 e limiteNumero (inclusivo). Isso parece correto.

No entanto, o problema parece estar na sua lógica de verificação e adição de números à lista. Você está verificando se o número gerado já está na lista e, se não estiver, adiciona-o à lista. Mas você só faz isso se a quantidade de números na lista já for maior ou igual a quantidadeMin. Isso pode ser um problema se quantidadeMin for maior que 0, pois inicialmente a lista está vazia e a condição quantidadeNaLista >= quantidadeMin nunca será verdadeira.

Além disso, você está usando recursão para continuar o sorteio até que a quantidade de números na lista seja menor que quantidadeMax. No entanto, você só verifica isso depois de adicionar um número à lista, o que significa que você pode acabar com mais números na lista do que o especificado em quantidadeMax.

Aqui está uma versão modificada do seu código que deve resolver esses problemas:

function sortear() {
    let quantidadeMin = parseInt(document.getElementById('de').value);
    let limiteNumero = parseInt(document.getElementById('ate').value);
    let quantidadeMax = parseInt(document.getElementById('quantidade').value);
    
    while (listaDeNumeros.length < quantidadeMax) {
        let numeros = Math.floor(Math.random() * limiteNumero) + 1;
        if (!listaDeNumeros.includes(numeros) && listaDeNumeros.length >= quantidadeMin) {
            listaDeNumeros.push(numeros);
        }
    }
    
    console.log(listaDeNumeros);
}

Nesse código, eu mudei a lógica para usar um loop while em vez de recursão. O loop continua até que a quantidade de números na lista seja igual a quantidadeMax. Dentro do loop, um número aleatório é gerado e, se ele não estiver na lista e a quantidade de números na lista for maior ou igual a quantidadeMin, ele é adicionado à lista.

Espero ter ajudado e bons estudos!