1
resposta

DÚVIDA - APLIQUEI A PROTEÇÃO NO INTERVALO, MAS NÃO ESTÁ FUNCIONANDO ADEQUADAMENTE

Boa noite,

Apliquei a proteção no intervalo, conforme sugerido pelo instrutor, porém, quando faço o teste colocando Quantidade de números 5, de 10 até 14, nada acontece após eu clicar em executar.

Abaixo segue o código completo:

function sortear(){
let quantidade = parseInt(document.getElementById('quantidade').value); // paga o VALOR inserido no campo 'Quant de Números'. Tem que usar parseint senão ele devolve uma str.
let de = parseInt(document.getElementById('de').value);  // paga o VALOR inserido no campo 'do número'.
let ate = parseInt(document.getElementById('ate').value);  // paga o VALOR inserido no campo 'até o numero'

if (de >= ate) {
    alert('Campo "Do número" deve ser inferior ao campo "Até o número". Verifique!');
    return;
  }

if (quantidade > (ate - de + 1)) {
    alert('Campo "Quantidade" deve ser menor ou igual ao intervalo informado no campo "Do número" até o campo "Até o número". Verifique!');
    return;
}

let sorteados = []; // lista vazia a ser preenchida com os numeros sorteados
let numero; // variável de controle

for (let i = 0; i < quantidade; i++) { // enquanto i for menor que quantidade digitada pelo usuário repita o loop
    numero = obterNumeroAleatorio(de, ate);    

    while (sorteados.includes(numero)) { // loop para verificar se o número sorteado já consta na lista SORTEADOS. esse INCLUDES retorna True ou False. Então, enquanto for verdadeiro (ou seja, o núm sorteado já está na lista SORTEADOS) o código rodará o while e sorteará outro núm.
        numero = obterNumeroAleatorio(de, até);
    }
     
    sorteados.push(numero); // método de inserção do numero sorteado na lista
}

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

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

function alterarStatusBotao() {
    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 reiniciar() {
    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>';
    alterarStatusBotao();
}

Será que alguém saberia onde está o erro?

Desde já agradeço.

1 resposta

Bom dia Mauro!

Pelo que vi tem um erro de digitação no while

while (sorteados.includes(numero)) { // loop para verificar se o número sorteado já consta na lista SORTEADOS. esse INCLUDES retorna True ou False. Então, enquanto for verdadeiro (ou seja, o núm sorteado já está na lista SORTEADOS) o código rodará o while e sorteará outro núm.
        numero = obterNumeroAleatorio(de, ate); //substitua o até(com acento) por ate, para corresponder a variável 
    }