1
resposta

[Projeto] Posso melhorar?

import java.util.Scanner;

public class Numero {
    static void main(String[] args) {
        Scanner leitura = new Scanner(System.in);

        System.out.println("Digite um número (ou 'fim' para encerrar: )");
        String valor = leitura.next();


        int contadorPositivo = 0;
        int contadorNegativo = 0;

        while (!valor.equalsIgnoreCase("fim")) {
            int resultado = Integer.parseInt(valor);

            if (resultado > 0) {
                contadorPositivo++;
            } else if (resultado < 0) {
                contadorNegativo++;
            }

            System.out.println("Digite um número (ou 'fim' para encerrar):");
            valor = leitura.next();
        }
        System.out.println("Número positivo: " + contadorPositivo);
        System.out.println("Número negativo: " + contadorNegativo);

        leitura.close();
    }

}
1 resposta

Oi, Estudante!

Seu raciocínio lógico está correto! Você entendeu perfeitamente como capturar a entrada antes do loop e atualizá-la no final dele para evitar um loop infinito. Isso é ótimo.

  1. Evitando repetição de código (DRY)

Note que você precisou escrever as linhas de System.out.println e leitura.next() duas vezes (uma antes do while e outra dentro dele).

  • Dica: O modelo que o instrutor usou (while(true) com break) é muito comum justamente para não precisarmos repetir essas linhas. Você entra no loop, pede o dado e, se for "fim", você quebra o ciclo. Isso deixa o código mais limpo.
  1. Tratamento de entrada (next vs nextLine)

Você usou leitura.next(). Embora funcione para palavras únicas, o next() às vezes deixa "sujeira" (como o "Enter") no buffer do teclado, o que pode dar dor de cabeça em programas maiores.

  • Sugestão: Prefira usar leitura.nextLine(). Ele lê a linha inteira e garante que o "Enter" foi consumido.

Continue firme nos estudos.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!