Entrada de Dados pelo Console com Scanner em Java

No desenvolvimento de aplicações em Java, a entrada de dados pelo console é uma das maneiras mais simples e comuns de interagir com o usuário. Para isso, utilizamos a classe Scanner, que faz parte do pacote java.util. Este artigo/tutorial explicará como utilizar o Scanner para ler diferentes tipos de dados e apresentar exemplos práticos para facilitar a sua implementação.


O Que É a Classe Scanner?

A classe Scanner é usada para obter a entrada de dados do usuário. Ela permite a leitura de diversos tipos de dados, como:

  • Strings
  • Inteiros
  • Valores decimais (float, double)
  • Caracteres
  • Booleanos

Configurando o Scanner

Antes de começar a usar o Scanner, é necessário importá-lo no início do código. O comando para importação é:

import java.util.Scanner;

Criando um Scanner e Lendo Dados do Usuário

Para utilizar o Scanner, é preciso criar uma instância dele e associá-la ao System.in, que é o fluxo de entrada padrão no console.

Exemplo Básico:

import java.util.Scanner;

public class EntradaDeDados {
    public static void main(String[] args) {
        // Criação do Scanner
        Scanner scanner = new Scanner(System.in);

        System.out.print("Digite seu nome: ");
        String nome = scanner.nextLine(); // Lê uma linha inteira do console

        System.out.print("Digite sua idade: ");
        int idade = scanner.nextInt(); // Lê um número inteiro

        System.out.println("Olá, " + nome + ". Você tem " + idade + " anos.");

        // Fechando o Scanner
        scanner.close();
    }
}

Lendo Diferentes Tipos de Dados

O Scanner possui métodos específicos para capturar diferentes tipos de entradas. Aqui estão alguns exemplos:

1. Lendo Números Inteiros

System.out.print("Digite um número inteiro: ");
int numero = scanner.nextInt(); // Método para números inteiros

2. Lendo Números Decimais

System.out.print("Digite um número decimal: ");
double decimal = scanner.nextDouble(); // Método para números decimais

Nota: O separador decimal padrão depende da localidade do sistema. Em alguns sistemas, pode ser necessário usar vírgula (,), enquanto em outros é o ponto (.).

3. Lendo Texto

System.out.print("Digite uma frase: ");
String texto = scanner.nextLine(); // Método para uma linha completa de texto

4. Lendo Um Único Caractere

Embora o Scanner não tenha um método direto para caracteres, você pode usar nextLine() e pegar o primeiro caractere:

System.out.print("Digite um caractere: ");
char caractere = scanner.nextLine().charAt(0); // Captura o primeiro caractere da entrada

5. Lendo Valores Booleanos

System.out.print("Digite true ou false: ");
boolean valor = scanner.nextBoolean(); // Método para valores booleanos

Tratando Erros de Entrada

É importante validar os dados inseridos pelo usuário para evitar erros. Por exemplo, se você espera um número e o usuário digitar texto, uma exceção será lançada. Use try-catch para capturar essas situações:

try {
    System.out.print("Digite um número inteiro: ");
    int numero = scanner.nextInt();
    System.out.println("Número digitado: " + numero);
} catch (Exception e) {
    System.out.println("Entrada inválida. Por favor, insira um número inteiro.");
}

Exemplo Completo: Calculadora Simples

Este exemplo utiliza o Scanner para criar uma calculadora básica:

import java.util.Scanner;

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

        System.out.print("Digite o primeiro número: ");
        double numero1 = scanner.nextDouble();

        System.out.print("Digite o segundo número: ");
        double numero2 = scanner.nextDouble();

        System.out.println("Escolha uma operação (+, -, *, /): ");
        char operacao = scanner.next().charAt(0);

        double resultado = 0;
        boolean operacaoValida = true;

        switch (operacao) {
            case '+':
                resultado = numero1 + numero2;
                break;
            case '-':
                resultado = numero1 - numero2;
                break;
            case '*':
                resultado = numero1 * numero2;
                break;
            case '/':
                if (numero2 != 0) {
                    resultado = numero1 / numero2;
                } else {
                    System.out.println("Erro: Divisão por zero!");
                    operacaoValida = false;
                }
                break;
            default:
                System.out.println("Operação inválida!");
                operacaoValida = false;
        }

        if (operacaoValida) {
            System.out.println("O resultado é: " + resultado);
        }

        scanner.close();
    }
}

Fechando o Scanner

Sempre feche o Scanner ao final do uso para liberar os recursos alocados. Isso é feito com o método close():

scanner.close();

Conclusão

O Scanner é uma ferramenta poderosa e flexível para entrada de dados em Java. Ele é essencial para construir programas interativos que leem informações do console. Neste tutorial, aprendemos como utilizá-lo para capturar diversos tipos de dados e implementar validações para garantir entradas corretas. Experimente usá-lo em seus projetos e explore suas possibilidades!