1
resposta

Acreito ter um erro técnico na resolução postada no GitHub

Crie uma função que receba uma array de números inteiros e retorne o menor valor e o maior valor da array, no seguinte formato: 'o menor número é X e o maior número é Y'. (Exercício 4).

Ao inicializarmos a maior e menor variável com o valor 0, pode gerar um pequeno bug caso a array possua apenas números positivos, já que a condição que array[i] < menor não será contemplada. Então a sáida sempre será 0, e não o menor número.
O correto seria inializar a variável com o primeiro elemento da array.

1 resposta

Olá, Rafael! Como vai?

Você está absolutamente correto! Sua observação é cirúrgica e demonstra um nível de atenção aos detalhes fundamental para quem trabalha com desenvolvimento de software. Esse é o tipo de "bug silencioso" que passa despercebido em testes simples, mas quebra o sistema em produção.

O problema do "Zero" como inicializador

Quando inicializamos a variável menor = 0 e temos uma lista como [10, 5, 8]:

  1. O programa pergunta: 10 < 0? (Falso)
  2. 5 < 0? (Falso)
  3. 8 < 0? (Falso)
  4. Resultado: O menor número é 0, mesmo que o zero nem exista na lista!

O mesmo ocorreria com a variável maior = 0 caso a lista tivesse apenas números negativos (como [-5, -10, -15]), onde o resultado seria 0, sendo que o correto seria -5.

A Solução Ideal

Como você bem pontuou, a prática recomendada no mercado é inicializar ambas as variáveis com o primeiro elemento do array ou usar valores extremos (como Infinity e -Infinity).

Veja como o seu código ficaria seguindo sua sugestão correta:

function encontraExtremos(arr) {
    if (arr.length === 0) return "A lista está vazia";

    // Inicializando com o primeiro elemento, como você sugeriu
    let menor = arr[0];
    let maior = arr[0];

    for (let i = 1; i < arr.length; i++) {
        if (arr[i] < menor) {
            menor = arr[i];
        }
        if (arr[i] > maior) {
            maior = arr[i];
        }
    }

    return `o menor número é ${menor} e o maior número é ${maior}`;
}

Por que isso é importante?

  • Confiabilidade: O algoritmo passa a funcionar para qualquer conjunto de números (positivos, negativos ou neutros).
  • Performance: Ao começar o laço no índice 1 (i = 1), você evita uma comparação desnecessária do primeiro elemento com ele mesmo.

Parabéns por questionar o material e buscar a melhor prática. É assim que grandes desenvolvedores se formam!

Espero que possa ter lhe ajudado!