Scanner (Input)
Scanner em Java: Lendo Dados do Usuário
E aí, futuro dev! Vamos aprender uma das coisas mais legais em Java: como fazer seu programa conversar com o usuário! O Scanner é a ferramenta que usamos para ler dados digitados no teclado.
O que é o Scanner?
O Scanner é uma classe do Java que permite ler dados de várias fontes (teclado, arquivos, etc.). Quando usamos com System.in, ele lê o que o usuário digita no terminal.
1. Importando o Scanner
Primeiro, precisamos avisar ao Java que vamos usar o Scanner. Isso é feito com o import:
import java.util.Scanner; // Sempre no começo do arquivo!
public class LeituraDados {
public static void main(String[] args) {
// Seu código aqui
}
}
2. Criando o Objeto Scanner
O Scanner é um objeto que precisamos criar antes de usar:
Scanner entrada = new Scanner(System.in);
Scanneré o tipoentradaé o nome que damos ao nosso scanner (pode ser qualquer nome)new Scanner(System.in)cria o scanner que lê do teclado
3. Métodos Principais do Scanner
nextLine() - Para ler textos (String)
System.out.print("Digite seu nome: ");
String nome = entrada.nextLine();
System.out.println("Olá, " + nome + "!");
nextInt() - Para ler números inteiros
System.out.print("Digite sua idade: ");
int idade = entrada.nextInt();
System.out.println("Você tem " + idade + " anos.");
nextDouble() - Para ler números decimais
System.out.print("Digite sua altura (ex: 1.75): ");
double altura = entrada.nextDouble();
System.out.println("Sua altura é " + altura);
4. Exemplo Prático Completo
Vamos criar um programa que coleta dados de um aluno:
import java.util.Scanner;
public class CadastroAluno {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.println("=== CADASTRO DO ALUNO ===");
System.out.print("Nome completo: ");
String nome = entrada.nextLine();
System.out.print("Idade: ");
int idade = entrada.nextInt();
System.out.print("Nota da prova (0.0 a 10.0): ");
double nota = entrada.nextDouble();
System.out.println("\n=== DADOS CADASTRADOS ===");
System.out.println("Nome: " + nome);
System.out.println("Idade: " + idade + " anos");
System.out.println("Nota: " + nota);
entrada.close(); // Importante: fechar o scanner!
}
}
5. O PROBLEMA DO nextLine() APÓS nextInt()
Esse é o erro mais chato para quem está começando! Vamos ver:
// PROBLEMA! CÓDIGO COM ERRO!
Scanner entrada = new Scanner(System.in);
System.out.print("Digite sua idade: ");
int idade = entrada.nextInt(); // Lê o número
System.out.print("Digite seu nome: ");
String nome = entrada.nextLine(); // PROBLEMA! Pula direto!
Por que isso acontece?
Quando você digita 25 e aperta ENTER, o nextInt() lê só o 25, mas a "quebra de linha" (ENTER) fica no buffer. O nextLine() lê essa quebra de linha e termina sem esperar você digitar!
Solução: Limpar o buffer com um nextLine() extra
// SOLUÇÃO CORRETA!
Scanner entrada = new Scanner(System.in);
System.out.print("Digite sua idade: ");
int idade = entrada.nextInt();
entrada.nextLine(); // LIMPA O BUFFER! Lê a quebra de linha esquecida
System.out.print("Digite seu nome: ");
String nome = entrada.nextLine(); // Agora funciona!
6. Exemplo Prático com a Correção
import java.util.Scanner;
public class CadastroCompleto {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.println("=== CADASTRO COMPLETO ===");
System.out.print("Digite seu nome: ");
String nome = entrada.nextLine();
System.out.print("Digite sua idade: ");
int idade = entrada.nextInt();
entrada.nextLine(); // LIMPA O BUFFER!
System.out.print("Digite sua profissão: ");
String profissao = entrada.nextLine();
System.out.print("Digite seu salário: ");
double salario = entrada.nextDouble();
System.out.println("\n=== RESUMO ===");
System.out.println("Nome: " + nome);
System.out.println("Idade: " + idade);
System.out.println("Profissão: " + profissao);
System.out.println("Salário: R$ " + salario);
entrada.close();
}
}
7. Erros Comuns e Como Evitá-los
InputMismatchException
// Isso vai dar erro!
Scanner entrada = new Scanner(System.in);
System.out.print("Digite um número: ");
int numero = entrada.nextInt();
// Se o usuário digitar "abc", dá InputMismatchException!
Dica: Sempre informe ao usuário o tipo de dado esperado:
System.out.print("Digite um NÚMERO INTEIRO (ex: 25): ");
Esquecer de fechar o Scanner
Scanner entrada = new Scanner(System.in);
// ... usa o scanner ...
// Se não fechar, pode causar vazamento de recursos!
entrada.close(); // Sempre feche quando não for mais usar!
8. Exercício Prático
Crie um programa que:
- Pergunte o nome do usuário
- Pergunte a idade
- Pergunte o peso (em kg, com decimal)
- Pergunte a altura (em metros, com decimal)
- Calcule o IMC (peso / altura²)
- Mostre todos os dados
Tente fazer antes de ver a solução!
import java.util.Scanner;
public class CalculadoraIMC {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.println("=== CALCULADORA DE IMC ===");
System.out.print("Nome: ");
String nome = entrada.nextLine();
System.out.print("Idade: ");
int idade = entrada.nextInt();
entrada.nextLine(); // Limpa buffer!
System.out.print("Peso (kg, ex: 70.5): ");
double peso = entrada.nextDouble();
System.out.print("Altura (m, ex: 1.75): ");
double altura = entrada.nextDouble();
double imc = peso / (altura * altura);
System.out.println("\n=== RESULTADO ===");
System.out.println("Nome: " + nome);
System.out.println("Idade: " + idade + " anos");
System.out.println("Peso: " + peso + " kg");
System.out.println("Altura: " + altura + " m");
System.out.printf("IMC: %.2f%n", imc);
entrada.close();
}
}
Resumo - Regras de Ouro
- Sempre importe:
import java.util.Scanner; - Crie o objeto:
Scanner entrada = new Scanner(System.in); - Use os métodos certos:
nextLine()para texto,nextInt()para inteiros,nextDouble()para decimais - Limpe o buffer: Depois de
nextInt()ounextDouble(), useentrada.nextLine()se for ler texto depois - Feche o Scanner:
entrada.close()quando não for mais usar - Informe o usuário: Mostre o tipo de dado esperado na mensagem
Com essas dicas, você já consegue criar programas interativos em Java! Pratique bastante e logo vai dominar a leitura de dados! 🚀