Entrada de Dados: Classe Scanner

Este artigo aborda comandos de entrada usando a Classe Scanner e comandos de saída usando o método printf.

Quem programa em linguagens estruturadas, como C e Pascal, e está aprendendo Java, depara-se com a seguinte situação: como atribuir valores para uma variável usando o teclado? Em C, por exemplo, tem-se a função scanf() e em Pascal, o procedimento readln().

No Java, a partir do Java 1.5 ou J2SE 5, que recebeu o codinome "Tiger", está disponível a classe Scanner do pacote java.util. Essa classe implementa as operações de entrada de dados pelo teclado no console.

Saiba mais Todos os Cursos de Java
Para utilizar a classe Scanner em uma aplicação Java deve-se proceder da seguinte maneira:
[ 1 ] importar o pacote java.util:
import java.util.Scanner;
[ 2 ] Instanciar e criar um objeto Scanner:
Scanner ler = new Scanner(System.in);
[ 3 ] Lendo valores através do teclado:
[ 3.1 ] Lendo um valor inteiro:
int n;

System.out.printf("Informe um número para a tabuada: ");
n = ler.nextInt();
[ 3.2 ] Lendo um valor real:
float preco;

System.out.printf("Informe o preço da mercadoria = R$ ");
preco = ler.nextFloat();
[ 3.3 ] Lendo um valor real:
double salario;

System.out.printf("Informe o salário do Funcionário = R$ ");
salario = ler.nextDouble();
[ 3.4 ] Lendo uma String, usado na leitura de palavras simples que não usam o caractere de espaço (ou barra de espaço):
String s;

System.out.printf("Informe uma palavra simples:\n");
s = ler.next();
[ 3.5 ] Lendo uma String, usado na leitura de palavras compostas, por exemplo, Pato Branco:
String s;

System.out.printf("Informe uma cadeia de caracteres:\n");
s = ler.nextLine();
[ 3.6 ] Na leitura consecutiva de valores numéricos e String deve-se esvaziar o buffer do teclado antes da leitura do valor String, por exemplo:
int n;
String s;

System.out.printf("Informe um Número Inteiro: ");
n = ler.nextInt();

ler.nextLine(); // esvazia o buffer do teclado

System.out.printf("Informe uma cadeia de caracteres:\n");
s = ler.nextLine();
[ 3.7 ] Lendo um caractere usando o método read() do pacote de classes System.in:
public static void main(String args[]) throws Exception {
char c;

System.out.printf("Informe um Caractere: ");
c = (char)System.in.read();
}

Método printf()

Outra novidade no Java 1.5 foi a incorporação da função printf() do C como um método do pacote de classes System.out.

O método printf(), utilizado para realizar uma saída de dados no fluxo de saída padrão System.out, tem a seguinte forma geral:

System.out.printf(<em>expressão_de_controle</em>, argumento1, argumento2, ...);

expressão_de_controle deve ser uma sequência de caracteres (portanto, delimitada por aspas duplas) que determina as informações que serão mostradas na tela. Nesta expressão podem existir dois tipos de informações: caracteres comuns e códigos de controle (ou especificadores de formato). Os códigos de controle, mostrados na Tabela 1, são precedidos por um % e são aplicados aos argumentos na mesma ordem em que aparecem. É importante destacar que deve existir para cada código de controle um argumento correspondente.

CódigoFormato (tipo de dados)
%cCaractere simples (char)
%sCadeia de caracteres (String)
%dInteiro decimal com sinal (int)
%iInteiro decimal com sinal (int)
%ldInteiro decimal longo (long)
%fReal em ponto flutuante (float ou double)
%eNúmero real em notação científica com o "e" minúsculo (float ou double)
%ENúmero real em notação científica com o "E" maiúsculo (float ou double)
%%Imprimir o próprio caractere %
Tabela 1. Códigos de controle ou especificadores de formato.

Aplicações Java

Para demonstrar a utilização dos métodos da classe Scanner do pacote java.util em operações de entrada de dados e do método printf() na formatação da saída através da utilização de códigos de controle foram implementadas as seguintes aplicações Java:

import java.util.Scanner; // 1. importando a classe Scanner public class Exemplo1 { public static void main(String[] args) { // 2. instanciando e criando um objeto Scanner Scanner ler = new Scanner(System.in); int i, n; System.out.printf("Informe o número para a tabuada:\n"); n = ler.nextInt(); // 3.1 entrada de dados (lendo um valor inteiro) System.out.printf("\n+--Resultado--+\n"); for (i=1; i<=10; i++) { System.out.printf("| %2d * %d = %2d |\n", i, n, (i*n)); } System.out.printf("+-------------+\n"); } }
Listagem 1. Tabuada de um número.
import java.util.Scanner; // 1. importando a classe Scanner public class Exemplo2 { public static void main(String args[]) { // 2. instanciando e criando um objeto Scanner Scanner ler = new Scanner(System.in); double pc, alt, vlrIMC; System.out.printf("Informe o Peso Corporal em kg: "); pc = ler.nextDouble(); // 3.3 entrada de dados (lendo um valor real) System.out.printf("Informe a Altura em metros...: "); alt = ler.nextDouble(); // 3.3 entrada de dados (lendo um valor real) System.out.printf("\n========================================\n"); vlrIMC = IMC(pc, alt); System.out.printf("IMC = %.2f (%s)\n", vlrIMC, interpretacaoIMC(vlrIMC)); System.out.printf("========================================\n"); } public static double IMC(double pc, double alt) { return(pc / (alt * alt)); } public static String interpretacaoIMC(double vlrIMC) { if (vlrIMC < 20) return("Magro"); else if ((vlrIMC >= 20) && (vlrIMC <= 24)) return("Normal"); else if ((vlrIMC >= 25) && (vlrIMC <= 29)) return("Acima do peso"); else if ((vlrIMC >= 30) && (vlrIMC <= 34)) return("Obeso"); else // acima de 34 return("Muito obeso"); } }
Listagem 2. Calculando o Índice de Massa Corpórea (IMC).
import java.io.IOException; import java.util.Scanner; // 1. importando a classe Scanner public class Exemplo3 { // através da cláusula throws indicamos que não iremos // tratar possíveis erros na entrada de dados realizada // através do método "read" do pacote de classes System.in public static void main(String[] args) throws IOException { // 2. instanciando e criando um objeto Scanner Scanner ler = new Scanner(System.in); String nome; char sexo; System.out.printf("Informe um nome:\n"); nome = ler.nextLine(); // 3.5 entrada de dados (lendo uma String) System.out.printf("\nInforme o sexo (M/F): "); // 3.7 entrada de dados (lendo um caractere) sexo = (char)System.in.read(); System.out.printf("\nResultado:\n"); if ((sexo == 'M') || (sexo == 'm')) System.out.printf("Seja bem vindo Sr. \"%s\".\n", nome); else System.out.printf("Seja bem vinda Sra. \"%s\".\n", nome); } }
Listagem 3. Entrada de dados do tipo caractere.
public class Exemplo4 { public static void main(String[] args) { String nomeMes[] = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"}; System.out.println("================"); System.out.println("Mês- Nome do Mês"); System.out.println("================"); for (int i=0; i<12; i++) { System.out.printf(" %0,2d- %s\n", (i+1), nomeMes[i]); } System.out.println("================"); } }
Listagem 4. Mostrando os nomes dos meses.

Ilustrando a execução das aplicações:

Listagem 1: Listagem 2:


Listagem 3: Listagem 4:


Mais sobre Java

Artigos relacionados