Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida em desafio com while e for

Pessoal, estava desenvolvendo um algoritmo de um desafio do freecodecamp ( esse aqui: https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/sum-all-numbers-in-a-range ), que consistia em uma função que recebia um array de dois numeros como parametro e devolvia a soma dos numeros entre esses dois. eu tentei o seguinte código: function sumAll(arr) { let total = 0; let i = Math.min(arr[0], arr[1]); while (i <= Math.max (arr[0], arr[1])) { i++; total += i;

            } 

         return total;
    }

    sumAll([1, 4]); //aqui é só uma chamada da função 

Pois bem, não funciona, devia dar 10, mas da 14. Porém usando o for no eguinte código:

    function sumAll(arr) {
            let total = 0;
              for (let i = Math.min(arr[0], arr[1]); i <= Math.max(arr[0], arr[1]);  i++) {
                    total += i;  
            } 
        return total;
    }

    sumAll([1, 4]);

Dá certo, 10. Eu só queria saber por que um da certo e o outro não. Fico agradecido desde já.

2 respostas
solução!

Eu acho que sei porque está dando errado. Vamos analisar o while: na primeira vez que entrar no while, vai acontecer isso -> , while (i=1 <= 4 (1,4) {i=1+1; total+= 2}. Ou seja, está dando o erro porque antes de ele guardar na variavel total, ele ta fazendo o i++, então na primeira vez, ele guarda já o valor 2 ao inves de 1. Então, seguindo isso, o total vai ficar assim: 1ª vez: 2, 2ª vez: 3, 3ª vez: 4, 4ª vez: 5. Somando: 2 + 3 + 4 + 5 = 14. Sei que a explicação ficou um pouco confusa, mas o segredo está que na primeira vez que ele armazena o total, como fez o i++ antes, ele guarda o valor 2, quando o correto seria ele guardar o valor 1.

Obrigado Matheus!