3
respostas

Novo loop para para a saida de números

No exercicio de adicionar dados no array, fiz aqui e funcionou.. achei blz.. mas ae pensei num bingo uma cartela tem oq 60 números?

decidi limitar a saída de números do array... com esse comando for.. veja. for (var teto = 0; teto <= 60; teto = teto + 1) { lógico para testar coloquei teto = 2, mas ele sempre vai adicionando indefinidamente.. Alguém já tentou fazer isso?

Segue o código completo.

<input type="text" id="numero" />
<input type="submit" value="Adicione e verifique no Bingo!" id="verificar" />
<script>
function pulalinha(){
document.write("<br>")

}
var sorteados = [];
var adicionarsorteado = function(){

    var numero = document.getElementById("numero").value;
    var teto = 0;
    for (var teto = 0; teto <= 60; teto  = teto + 1){
        for (var i = 0; i < sorteados.length; i = i + 1){
            if (sorteados [i] == numero){
                alert ("Numero já sorteado!");
                return;
            }
        }
    }
    sorteados.push(numero);
    console.log(sorteados);
}
var botao = document.getElementById("verificar");
botao.onclick = adicionarsorteado;
document.write(i);
</script>
};
3 respostas

Olá Eduardo,

Não entendi muito bem o que você quis dizer com "limitar a saída de números do array" e "ele sempre vai adicionando indefinidamente"

Só para ficar um pouco mais claro: Quando você põe aquele trecho de codigo dentro do for( o que tem <=60) só faz com que ele repita o código 61 vezes.

Da forma como está é equivalente a:

for (var i = 0; i < sorteados.length; i = i + 1){
            if (sorteados [i] == numero){
                alert ("Numero já sorteado!");
                return;
            }
        }

for (var i = 0; i < sorteados.length; i = i + 1){
            if (sorteados [i] == numero){
                alert ("Numero já sorteado!");
                return;
            }
        }

...
for (var i = 0; i < sorteados.length; i = i + 1){
            if (sorteados [i] == numero){
                alert ("Numero já sorteado!");
                return;
            }
        }

61 vezes.

Você poderia explicar um pouco melhor a dúvida para eu poder te ajudar?

Olá Lucas, obrigado pela resposta, olha o que eu pensei.

Era para fazer um teste coloquei teto <= 2 e testei o programa... já consegui colocar 8 posições no array.. pela minha cabeça ele deveria aceitar só 3 números, se desse certo com <=2 eu mudaria para comparar com 60.

Parece que essa linha no meu programa simplesmente não ta fazendo nada. for (var teto = 0; teto <= 60; teto = teto + 1)

Olá Eduardo, esta linha está funcionando, sim! Funciona assim:

  1. Esse método é para adicionar um número (pelo id) à nossa lista de sorteados.

  2. Logo, esse trecho de código:

    for (var i = 0; i < sorteados.length; i = i + 1){
             if (sorteados [i] == numero){
                 alert ("Numero já sorteado!");
                 return;
             }
         }

    percorre o array de sorteados verificando se o número que queremos adicionar já existe. Assim, não criamos duplicatas. Pois só podemos sortear cada número uma vez! Chamerei esse trecho de código de checaRepetido Ok?

  3. Quando você adiciona o for de 0 a 60, envolvendo o checaRepetido, você simplesmente checa se o novo número não está repetido não apenas uma vez, mas 61 vezes.

Então, essa linha funciona. A questão é se o número já existia ele deveria retornar 61 vezes que o número já foi sorteado. E caso o número não existisse ele não faria mais nada, terminaria a execução do loop e continuaria o método onde aí sim, adiciona o número no array.

Se você quiser limitar para 2 ou 60 o número máximo de números sorteados, você poderia colocar

if (sorteados.length == 60){
    alert ("Todos os sorteios já foram realizados");
    return;
}

No começo do método. Assim, caso já tenham sido sorteados x números então, solta o alerta avisando que não pode mais sortear.