image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF

SL

SAMANTHA LIMA05/03/2025 17:58
Compartilhe
Nexa - Análise Avançada de Imagens e Texto com IA na AWSRecomendados para vocêNexa - Análise Avançada de Imagens e Texto com IA na AWS

Scanner vs JOptionPane: Qual desses dois métodos te enganaria primeiro?

    Se você já programou em Java, provavelmente já usou Scanner para capturar dados do usuário pelo terminal ou JOptionPane para exibir caixas de diálogo gráficas. Mas será que você conhece todas as pegadinhas que esses dois métodos podem esconder? Vamos descobrir!

    A pegadinha do Scanner: O "enter" invisível

    Imagine que você está pedindo dois inputs do usuário: um número e um texto. Algo assim:

    import java.util.Scanner;
    
    public class ScannerPegadinha {
      public static void main(String[] args) {
          Scanner scanner = new Scanner(System.in);
          
          System.out.print("\u001B[32mDigite um número: \u001B[0m");
          int numero = scanner.nextInt();
          
          System.out.print("\u001B[32mDigite uma palavra: \u001B[0m");
          String palavra = scanner.nextLine();
          
          System.out.println("\u001B[34mVocê digitou: \u001B[0m" + numero + " e " + palavra);
          scanner.close();
      }
    }
    

    O que acontece quando rodamos esse código?

    👀 Surpresa! O programa nem espera a entrada da palavra! Ele pula direto e imprime uma string vazia. Isso acontece porque nextInt() lê apenas o número, mas o Enter que o usuário digitou fica "preso" no buffer. Quando nextLine() é chamado, ele lê esse Enter e assume que é a resposta do usuário.

    🔧 Como corrigir? Basta adicionar um scanner.nextLine() extra depois da leitura do nextInt() para consumir o Enter pendente.

    System.out.print("\u001B[32mDigite um número: \u001B[0m");
    int numero = scanner.nextInt();
    scanner.nextLine(); // Limpa o buffer
    System.out.print("\u001B[32mDigite uma palavra: \u001B[0m");
    String palavra = scanner.nextLine();
    

    A pegadinha do JOptionPane: Quando um número não é um número

    Agora, vamos para o JOptionPane. Ele facilita muito a interação com o usuário, mas... ele tem um truque curioso! Veja este código:

    import javax.swing.JOptionPane;
    
    public class JOptionPanePegadinha {
      public static void main(String[] args) {
          String input = JOptionPane.showInputDialog("Digite um número:");
          int numero = Integer.parseInt(input);
          JOptionPane.showMessageDialog(null, "Você digitou: " + numero);
      }
    }
    

    Tudo parece normal, certo? Mas tente rodar o programa e digitar algo que não seja um número, como "abc".

    💥 Boom! O programa quebra com uma NumberFormatException. Isso acontece porque JOptionPane captura entradas como strings, e a conversão para int não é garantida.

    🔧 Como corrigir? Podemos tratar esse erro com um try-catch:

    try {
      int numero = Integer.parseInt(input);
      JOptionPane.showMessageDialog(null, "Você digitou: " + numero);
    } catch (NumberFormatException e) {
      JOptionPane.showMessageDialog(null, "Erro: digite um número válido.");
    }
    

    Agora, se o usuário digitar algo errado, ele recebe um aviso amigável em vez de um erro fatal.

    Scanner ou JOptionPane: Qual deles é mais traiçoeiro?

    Depende! O Scanner pode te pregar uma bela peça com o buffer de entrada, enquanto o JOptionPane pode derrubar o programa com entradas inesperadas.

    🔹 Se você trabalha com terminal: Cuidado com os nextInt() e nextLine() juntos! 🔹 Se você usa interface gráfica: Sempre valide as entradas antes de convertê-las.

    E você, já caiu em alguma dessas armadilhas? Conta aqui nos comentários! 😆

    Compartilhe
    Recomendados para você
    Microsoft Certification Challenge #3 DP-100
    Decola Tech 2025
    Microsoft AI for Tech - Copilot Studio
    Comentários (1)
    DIO Community
    DIO Community - 06/03/2025 12:06

    Ótima comparação entre Scanner e JOptionPane, Samantha! Seu artigo traz exemplos práticos e pegadinhas comuns que podem confundir quem está aprendendo Java, tornando o conteúdo acessível e útil tanto para iniciantes quanto para desenvolvedores mais experientes.

    A forma como você explicou o problema do "enter invisível" no Scanner e a conversão insegura no JOptionPane foi muito clara, além de já trazer as soluções corretas para evitar esses erros. O uso de códigos coloridos para destacar a interação no terminal foi um toque extra que melhora a experiência de leitura.

    O destaque para quando usar Scanner ou JOptionPane, dependendo do contexto (terminal x interface gráfica), ajuda quem ainda está se familiarizando com essas abordagens no Java.

    Artigo didático, bem estruturado e com dicas valiosas! Quem já se perdeu nesses erros com certeza vai se identificar!

    Recomendados para você