1
resposta

Alguém sabe me dizer por que não funciona?

Criei um programa parecido com o adivinha_mais.html e dentro dele a função preencheLista:

    function preencheLista(tamanhoLista){
                var listaAleatoria = [];
        var i = 1;


        while(i <= tamanhoLista) {

            var numeroAleatorio = sorteiaNumero();    
            var achou = false;

            /*
            for(var j = 0; j < listaAleatoria.length; j + 1){
            alert(numeroAleatorio + 'x' + listaAleatoria[j]);
                if(listaAleatoria[j] == numeroAleatorio){
                    achou = true;
                    break;
                }
            }
            */

            var j = 0;
            while(j < listaAleatoria.length){
                if(listaAleatoria[j] == numeroAleatorio){
                    achou = true;
                    break;
                }
                j = j + 1;
            }

            if(achou == false){
                listaAleatoria.push(numeroAleatorio);    
                i = i + 1;
            }
        }

        console.log(listaAleatoria);

    }

Para verificar se o número sorteado já exista na lista antes de registrá-lo, eu utilizei primeiro a estrutura for (trecho entre /* */), mas o programa entrava em um loop infinito.

Depois de inúmeras tentativas de mudanças, testei substituir pela estrutura while(j < listaAleatoria.length) e o programa funcionou.

Alguém saberia me dizer o que estava errado?

Ps.: para fazer o incremento, a sintaxe i++ também não funcionou.

1 resposta

Oi Luigi tudo bom?

O problema está no incremento:

            for(var j = 0; j < listaAleatoria.length; j + 1){

Aqui estamos usando j + 1, que é apenas um comando que retorna o valor de j acrescido de um. O correto seria atualizar a variavel j:

            for(var j = 0; j < listaAleatoria.length; j = j + 1){

Ou, de forma mais reduzida

            for(var j = 0; j < listaAleatoria.length; j += 1){

Ou, mais reduzido ainda:

            for(var j = 0; j < listaAleatoria.length; j++){