Índice:
Vídeo: Programar em Java - Interagir com o usuário | "Scanner" - Aula 11 2024
Até Java 1. 5, obter a entrada de texto do usuário em um programa Java baseado em console não foi fácil. Mas com Java 1. 5, uma nova classe - chamada
Scanner
- foi introduzida para simplificar a tarefa de obter a entrada do usuário. Aqui, você usa a classe
Scanner
para obter valores de entrada simples do usuário. As técnicas que eu apresento aqui são usadas em muitos dos programas mostrados no restante deste livro.
Se você estiver usando uma versão mais antiga do Java, você ainda deve ler isso porque muitos programas usam a classe
Scanner
.
O programa simples abaixo usa a classe
Scanner
para ler um valor inteiro do usuário e, em seguida, exibe o valor de volta ao console para verificar se o programa recebeu o valor inserido pelo usuário. Aqui está uma amostra da janela do console para este programa:
Digite um número inteiro: 5
Você digitou 5.
O programa começa exibindo a mensagem
Digite um número inteiro:
na primeira linha. Então espera que você digite um número. Quando você digita um número (como 5) e pressione a tecla Enter, ele exibe a mensagem de confirmação (
Você digitou 5
.) Na segunda linha.
importar java. util. Scanner; @@ ra1
classe pública ScannerApp
{
scanner estático sc = novo Scanner (System in); @@ ra6
public static void main (String [] args)
{
Sistema. Fora. imprimir ("Digite um número inteiro:"); @@ ra10
int x = sc. nextInt (); @@ ra11
Sistema. Fora. println ("Você inseriu" + x + "."); @@ ra12
}
}
Importando a classe Scanner em Java
Antes de usar a classe
Scanner
em um programa, você deve importá-lo. Para fazer isso, você codifica uma declaração
import
no início do programa, antes da declaração de classe:
importar java. util. Scanner;
Observe que
java
e
util
não estão em maiúsculas, mas
Scanner
é.
Se você estiver usando outras classes no
java. util
, você pode importar todo o pacote codificando a indicação
import
como esta:
importar java. util. *;
Declarando e criando um objeto Scanner em Java
Antes de poder usar a classe
Scanner
para ler a entrada do console, você deve declarar uma variável
Scanner
e criar uma instância da classe
Scanner
. Você pode querer criar a variável
Scanner
como uma variável de classe e criar o objeto
Scanner
no iniciador da variável de classe, conforme mostrado na linha 6 do programa acima:
scanner estático sc = novo Scanner (System in);
Dessa forma, você pode usar a variável
sc
em qualquer método da classe.
Para criar um objeto
Scanner
, você usa a palavra-chave
nova
seguida de uma chamada para o construtor de classe
Scanner
. Observe que a classe
Scanner
requer um parâmetro que indique o fluxo de entrada de que a entrada vem. Você pode usar
Sistema. em
aqui para especificar a entrada padrão do console do teclado.
Obter entrada
Para ler um valor de entrada do usuário, você pode usar um dos métodos da classe
Scanner
que estão listados abaixo. Como você pode ver, o tipo de dados primitivo tem um método separado.
Método | Explicação |
booleano nextBoolean ()
|
Lê um valor
booleano
do usuário. |
byte nextByte ()
|
Lê um valor
byte
do usuário. |
double nextDouble ()
|
Lê um valor
duplo
do usuário. |
float nextFloat ()
|
Lê um valor
float
do usuário. |
int nextInt ()
|
Lê um valor
int
do usuário. |
String nextLine ()
|
Lê um valor
String
do usuário. |
long nextLong ()
|
Lê um valor
longo
do usuário. |
short nextShort ()
|
Lê um valor
curto
do usuário. |
Observe na primeira coluna da tabela que cada listagem de métodos começa com o tipo do valor retornado pelo método. O método
nextInt
, por exemplo, retorna um valor
int
. Além disso, note que cada um dos métodos termina com um conjunto vazio de parênteses. Isso significa que esses métodos não requerem parâmetros. Se um método requer parâmetros, os parâmetros estão listados nesses parênteses.
Como esses métodos lêem um valor do usuário e retornam o valor, você geralmente usa em instruções que atribuem o valor a uma variável. A linha 11, por exemplo, lê um
int
e atribui-lo a uma variável chamada
x
.
Quando o método
nextInt
é executado, o programa espera que o usuário insira um valor na janela do console. Para permitir que o usuário saiba qual tipo de entrada o programa espera, geralmente você deve chamar o sistema
. Fora. imprima o método
antes de chamar um método
Scanner
para obter a entrada. A linha 10 chama
Sistema. Fora. imprima
para exibir a mensagem
Digite um número inteiro:
no console. Dessa forma, o usuário sabe que o programa está aguardando a entrada.
Se o usuário inserir um valor que não pode ser convertido no tipo correto, o programa falha, o que significa que ele termina abruptamente. À medida que o programa falha, ele exibe uma mensagem de erro enigmática que indica o que causou a falha. Se você inserir
três
em vez de um número real, por exemplo, a janela do console parece algo assim:
Digite um número inteiro: três Exceção no java "main" principal. util. InputMismatchException
no java. util. Scanner. throwFor (Scanner. java: 819)
em java. util. Scanner. seguinte (Scanner. java: 1431)
em java. util. Scanner. NextInt (Scanner. java: 2040)
em java. util. Scanner. NextInt (Scanner. java: 2000)
no ScannerApp.principal (ScannerApp. java: 11)
Esta mensagem indica que ocorreu uma exceção chamada
InputMismatchException
, o que significa que o programa esperava ver um número inteiro, mas obteve outra coisa em vez disso. Se você não sabe como fornecer exceções como essas para que o programa possa exibir uma mensagem mais amigável e dar ao usuário outro tiro ao inserir um valor correto, você deve aguentar o fato de que, se o usuário inserir dados incorretos, Seu programa falha sem graça.
Você pode impedir que o
nextInt
e métodos similares de falhar com dados de entrada incorretos usando primeiro um dos métodos listados aqui para testar a próxima entrada para se certificar de que é válido.
Método | Explicação |
boolean hasNextBoolean ()
|
Retorna
true
se o próximo valor inserido pelo usuário for válido < valor booleano
.
boolean hasNextByte () |
Retorna
|
true
se o próximo valor inserido pelo usuário for um valor
byte
válido.
boolean hasNextDouble () |
Retorna
|
true
se o próximo valor inserido pelo usuário é um valor
duplo
válido.
boolean hasNextFloat () |
Retorna
|
true
se o próximo valor inserido pelo usuário for um valor
float
válido.
boolean hasNextInt () |
Retorna
|
true
se o próximo valor inserido pelo usuário é um valor
int
válido.
boolean hasNextLong () |
Retorna
|
true
se o próximo valor inserido pelo usuário for um valor válido
longo
.
boolean hasNextShort () |
Retorna
|
true
se o próximo valor inserido pelo usuário é um valor
curto
válido.
|