[Link].
br
[versão para impressão]
Link original: [Link]
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().
Saiba mais sobre a plataforma Java SE
No Java, a partir do Java 1.5 ou J2SE 5, que recebeu o codinome "Tiger", está disponível a classe Scanner do pacote [Link]. Essa classe implementa as operações de
entrada de dados pelo teclado no console.
Para utilizar a classe Scanner em uma aplicação Java deve-se proceder da seguinte
maneira:
importar o pacote [Link]:
[1]
import [Link];
Instanciar e criar um objeto Scanner:
[2]
Scanner ler = new Scanner([Link]);
[3] Lendo valores através do teclado:
Lendo um valor inteiro:
int n;
[ 3.1 ]
[Link]("Informe um número para a tabuada: ");
n = [Link]();
Lendo um valor real:
float preco;
[ 3.2 ]
[Link]("Informe o preço da mercadoria = R$ ");
preco = [Link]();
Lendo um valor real:
double salario;
[ 3.3 ]
[Link]("Informe o salário do Funcionário = R$ ");
salario = [Link]();
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;
[ 3.4 ]
[Link]("Informe uma palavra simples:\n");
s = [Link]();
Lendo uma String, usado na leitura de palavras compostas, por exemplo, Pato
Branco:
String s;
[ 3.5 ]
[Link]("Informe uma cadeia de caracteres:\n");
s = [Link]();
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;
[Link]("Informe um Número Inteiro: ");
[ 3.6 ]
n = [Link]();
[Link](); // esvazia o buffer do teclado
[Link]("Informe uma cadeia de caracteres:\n");
s = [Link]();
Lendo um caractere usando o método read() do pacote de classes [Link]:
public static void main(String args[]) throws Exception {
char c;
[ 3.7 ]
[Link]("Informe um Caractere: ");
c = (char)[Link]();
Saiba mais sobre a classe Scanner do Java
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 [Link].
O método printf(), utilizado para realizar uma saída de dados no fluxo de saída padrão [Link], tem a seguinte forma geral:
[Link](<em>expressão_de_controle</em>, argumento1, argumento2, ...);
A 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ódigo Formato (tipo de dados)
%c Caractere simples (char)
%s Cadeia de caracteres (String)
%d Inteiro decimal com sinal (int)
%i Inteiro decimal com sinal (int)
%ld Inteiro decimal longo (long)
%f Real em ponto flutuante (float ou double)
%e Número real em notação científica com o "e" minúsculo (float ou double)
%E Nú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 [Link] 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 [Link]; // 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([Link]);
int i, n;
[Link]("Informe o número para a tabuada:\n");
n = [Link](); // 3.1 entrada de dados (lendo um valor inteiro)
[Link]("\n+--Resultado--+\n");
for (i=1; i<=10; i++) {
[Link]("| %2d * %d = %2d |\n", i, n, (i*n));
}
[Link]("+-------------+\n");
}
}
Listagem 1. Tabuada de um número.
import [Link]; // 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([Link]);
double pc, alt, vlrIMC;
[Link]("Informe o Peso Corporal em kg: ");
pc = [Link](); // 3.3 entrada de dados (lendo um valor real)
[Link]("Informe a Altura em metros...: ");
alt = [Link](); // 3.3 entrada de dados (lendo um valor real)
[Link]("\n========================================\n");
vlrIMC = IMC(pc, alt);
[Link]("IMC = %.2f (%s)\n", vlrIMC, interpretacaoIMC(vlrIMC));
[Link]("========================================\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 [Link];
import [Link]; // 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 [Link]
public static void main(String[] args) throws IOException {
// 2. instanciando e criando um objeto Scanner
Scanner ler = new Scanner([Link]);
String nome;
char sexo;
[Link]("Informe um nome:\n");
nome = [Link](); // 3.5 entrada de dados (lendo uma String)
[Link]("\nInforme o sexo (M/F): ");
// 3.7 entrada de dados (lendo um caractere)
sexo = (char)[Link]();
[Link]("\nResultado:\n");
if ((sexo == 'M') || (sexo == 'm'))
[Link]("Seja bem vindo Sr. \"%s\".\n", nome);
else [Link]("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"};
[Link]("================");
[Link]("Mês- Nome do Mês");
[Link]("================");
for (int i=0; i<12; i++) {
[Link](" %0,2d- %s\n", (i+1), nomeMes[i]);
}
[Link]("================");
}
Listagem 4. Mostrando os nomes dos meses.
Ilustrando a execução das aplicações:
Listagem 1: Listagem 2:
Listagem 3: Listagem 4:
Saiba mais sobre Comandos de Entrada e Saída
Curso relacionado: Java Aplicado
Curso relacionado: Java: Introdução a orientação a objetos
por Omero Francisco
Expert em Java e programação Web