Olá, Pedro. Como vai?
O seu código traz uma excelente abordagem para resolver o problema! Você utilizou de forma muito inteligente uma condição composta no laço while, o que garante que o programa não continue rodando caso o array de caixas chegue ao fim antes de atingirmos o limite de 5 caixas processadas. Isso evita erros de leitura de índices inexistentes (undefined).
No entanto, analisando o seu código atual, há um pequeno detalhe que causará um loop infinito (o programa ficará rodando para sempre) ou travará a execução.
Vamos entender o motivo e como solucionar isso de forma simples:
O problema do incremento
No seu código, a variável i (que controla qual elemento do array estamos olhando) não está sendo incrementada em nenhum momento. Para que o while passe para a próxima caixa do array, precisamos somar 1 ao i a cada repetição (i++), independentemente de a caixa ser válida ou danificada.
Se não incrementarmos o i, o programa ficará preso eternamente avaliando a primeira caixa do array (caixas[0], que é 12).
Solução Corrigida
Para corrigir isso, basta adicionar o i++ ao final do bloco do while, garantindo que o índice avance a cada iteração:
const caixas = [12, -1, 8, 0, -5, 3, 7, 14];
let contador = 0;
let i = 0;
while (contador <= 5 && i < caixas.length) {
if (caixas[i] >= 0) {
console.log("Caixa processada: ", caixas[i]);
contador++;
} else {
console.log("Caixa danificada, ignorada.");
}
i++; // Incremento essencial para avançar no array
}
Uma alternativa ainda mais limpa: O laço for...of
Como estamos trabalhando com uma lista e queremos analisar os elementos em sequência, uma boa prática em JavaScript moderno é utilizar o laço for...of combinado com a instrução break. Isso deixa o código mais legível e diminui a chance de esquecermos de incrementar as variáveis de controle.
Veja essa alternativa:
const caixas = [12, -1, 8, 0, -5, 3, 7, 14];
let contador = 0;
for (const caixa of caixas) {
if (contador >= 5) {
break; // Interrompe o laço assim que processar 5 caixas válidas
}
if (caixa >= 0) {
console.log("Caixa processada: ", caixa);
contador++;
} else {
console.log("Caixa danificada, ignorada.");
}
}
- Vantagem: Você não precisa gerenciar manualmente o índice
i, o JavaScript faz isso por debaixo dos panos para você.
Parabéns pela iniciativa de buscar uma solução alternativa! Continue praticando a lógica dos laços, pois eles são fundamentais no dia a dia do desenvolvimento.
Espero que possa ter lhe ajudado!