1
resposta

CORREÇÃO DE BUG

Olá, quando iamos sortear 5 números de 1 a 4, por exempl,o o código bugava e tratava por causa da condicional de números distintos, tentei resolver, agora quando a quantidade de números é menor que o intervalo aparece um alert, no entanto quando coloco 5 números de 1 a 5 ele também aparece o alert que não foi possível gerar números distintos, como resolver isso.

function sortear() { let quantidade = parseInt(document.getElementById('quantidade').value); let de = parseInt(document.getElementById('de').value); let ate = parseInt(document.getElementById('ate').value); let sorteados = [];

let tentativas = 0;
while (sorteados.length < quantidade && tentativas < quantidade) {
    let numero = sorteador(de, ate);
    if (!sorteados.includes(numero)) {
        sorteados.push(numero);
    }
    tentativas++;
}

if (sorteados.length < quantidade) {
    alert(`Não foi possível sortear ${quantidade} números distintos no intervalo de ${de} a ${ate}.`);
    exibirReiniciar();
    reiniciarSorteador();
     
} else {
    exibirTextoNaTela(sorteados);
    exibirReiniciar();
}

}

function sorteador(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }

function exibirTextoNaTela(sorteados) { let resultado = document.getElementById('resultado'); resultado.innerHTML = <label class="texto__paragrafo">Números sorteados: ${sorteados}</label>; }

function exibirReiniciar(){ let botao = document.getElementById('btn-reiniciar'); if (botao.classList.contains('container__botao-desabilitado')){ botao.classList.remove('container__botao-desabilitado'); botao.classList.add('container__botao'); } else { botao.classList.remove('container__botao'); botao.classList.add('container__botao-desabilitado'); } }

function reiniciarSorteador(){ document.getElementById('quantidade').value = ''; document.getElementById('de').value = ''; document.getElementById('ate').value= ''; document.getElementById('resultado').innerHTML = '' exibirReiniciar(); }

1 resposta

Olá, Nathaly!

Entendi o seu problema e vou tentar ajudar. O que está acontecendo é que a lógica atual do seu código limita o número de tentativas para sortear números distintos ao valor da quantidade de números que você quer sortear. Isso pode ser insuficiente, especialmente quando o intervalo de números é pequeno.

Para resolver isso, podemos ajustar o código para permitir mais tentativas até que todos os números distintos sejam sorteados ou até que seja impossível continuar (por exemplo, se o intervalo for menor que a quantidade de números desejada). Vou sugerir uma abordagem que deve resolver o problema:

  1. Verificar se é possível sortear a quantidade desejada de números distintos antes de iniciar o sorteio.
  2. Remover a limitação de tentativas baseada na quantidade de números a serem sorteados.

Aqui está uma versão ajustada do seu código:

function sortear() {
    let quantidade = parseInt(document.getElementById('quantidade').value);
    let de = parseInt(document.getElementById('de').value);
    let ate = parseInt(document.getElementById('ate').value);
    let sorteados = [];

    // Verifica se é possível sortear a quantidade desejada de números distintos
    if (quantidade > (ate - de + 1)) {
        alert(`Não é possível sortear ${quantidade} números distintos no intervalo de ${de} a ${ate}.`);
        return;
    }

    // Continua tentando até obter a quantidade desejada de números distintos
    while (sorteados.length < quantidade) {
        let numero = sorteador(de, ate);
        if (!sorteados.includes(numero)) {
            sorteados.push(numero);
        }
    }

    exibirTextoNaTela(sorteados);
    exibirReiniciar();
}

function sorteador(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function exibirTextoNaTela(sorteados) {
    let resultado = document.getElementById('resultado');
    resultado.innerHTML = `<label class="texto__paragrafo">Números sorteados: ${sorteados}</label>`;
}

function exibirReiniciar(){
    let botao = document.getElementById('btn-reiniciar');
    if  (botao.classList.contains('container__botao-desabilitado')){
        botao.classList.remove('container__botao-desabilitado');
        botao.classList.add('container__botao');
    } else {
        botao.classList.remove('container__botao');
        botao.classList.add('container__botao-desabilitado');
    }
}

function reiniciarSorteador(){
    document.getElementById('quantidade').value = '';
    document.getElementById('de').value = '';
    document.getElementById('ate').value= '';
    document.getElementById('resultado').innerHTML = '<label class="texto__paragrafo">Números sorteados: nenhum até agora</label>';
    exibirReiniciar();
}

Com essas alterações, o código primeiro verifica se é possível sortear a quantidade desejada de números distintos dentro do intervalo fornecido. Se for possível, ele continua tentando até obter todos os números distintos necessários.

Espero ter ajudado e bons estudos!