[9] Lendo dados a partir do teclado com Scanner
Autor: Leitão Maluco | Publicado: 2008-02-01T06:16:00-08:00

Até o momento só utilizamos o console para exibir saídas como mensagens de "Hello World" ou valores de um objeto. Agora vamos aprender a ler dados a partir do teclado e exibí-los. Para isto, vamos fazer uso de nossa primeira classe da API do Java: a classe Scanner.Embora ler dados do teclado não seja a única especialidade da classe Scanner, a utilizaremos apenas para este propósito.Localizando a classe ScannerAfinal, se a classe Scanner não foi criada por nós, então onde ela se encontra? Como foi dito anteriormente, Scanner é uma classe da API do Java. Mas como teremos acesso à API do Java? Simples, ao criar um projeto no Eclipse, note que "anexado" ao seu projeto se encontra a JRE System Library, que contém todas as classes da Java API.A API organiza suas classes por pacotes, e toda classe da API está dentro de um pacote. A API Java é muito rica e extensa, desde já é possível que haja classes com nomes iguais. Então, para se utilizar uma determinada classe devemos especificar, em código, em qual pacote a classe se encontra. Com o Scanner não será diferente. Seu caminho é:  java->util->Scanner. Isto quer dizer que a classe Scanner está dentro do pacote util, que por sua vez está contido no pacote java.Ao ato de "usar" uma classe de um pacote externo chamamos de importação de pacotes. Para importar uma classe em Java utilizamos a palavra-chave import seguida do caminho da classe. Logo para importar Scanner usaremos o código:import java.util.Scanner;Criando um objeto do tipo ScannerO procedimento para se criar uma instância de Scanner é semelhante à criação do objeto Window - classe em que trabalhamos no Post anterior.Para exemplificar vamos criar um objeto do tipo Scanner que se chamará "entrada":Scanner entrada = new Scanner(System.in);Não se preocupe com o trecho:  new Scanner(System.in);Mantenha em mente que um objeto do tipo Scanner está sendo criado e que devemos nos concentrar apenas em ler dados a partir do teclado.Criando a classe EntradaDadosAntes de mais nada, para rodarmos um programa Java lembre-se de que precisamos de uma classe que contenha o método main. Então, vamos criar uma classe chamada EntradaDados, e logo em seguida implementamos o método main dentro dela:public class EntradaDados {   public static void main(String[] args) {        }}Esquecemos apenas de inserir o código de instanciação do objeto "entrada" dentro do método main. Inserindo-o teremos:public class EntradaDados {    public static void main(String[] args) {   Scanner entrada = new Scanner(System.in);}}O código acima falhará no processo de compilação, pois Scanner é reconhecido como um símbolo estranho, ou seja, o  javac não reconhecerá Scanner como uma classe, pois você não a importou. Para resolver o problema importaremos a classe Scanner antes da declaração da classe EntradaDados. Observe o código resultante:import java.util.Scanner;public class EntradaDados {public static void main(String[] args) {   Scanner entrada = new Scanner(System.in);        }}Agora seu programa pode ser compilado e executado sem erros. Porém, sua única funcionalidade é criar um objeto do tipo Scanner e encerrar sua execução. Scanner também contém métodosOra, se Scanner é uma classe que lê dados - observe a ação: LER - então ela possui métodos que possibilitam esta ação. O que difere uma classe de outra, do ponto de vista genérico, são as funcionalidades de seus métodos.Através do objeto "entrada", que é do tipo Scanner, temos acesso a diversos métodos para leitura de teclado. São alguns deles:* next()  :              para ler textos    * nextInt()  :       para ler números inteiros    * nextFloat()  :   para ler números reais - ou números de ponto flutuante.* nextDouble() : para ler números reais - ou números de ponto flutuante com dupla precisãoLendo um texto com ScannerVamos fazer com que nosso programa leia e escreva o nome do usuário. Logo após a criação do objeto entrada inclua o código:System.out.println("Digite seu nome: ");String nome = entrada.next();System.out.println("Seu nome: ");System.out.println(nome);Note que ao executar o programa, a seguinte saída será exibida no console:Digite seu nome:Este é o momento em que o usuário deve digitar seu nome no console. Após a digitação, ela deve ser confirmada com o pressionamento da tecla Enter. Logo, a seguinte saída será mostrada:Digite seu nome:SchneiderSeu nome:SchneiderAo digitar o nome e pressionar teclar Enter, o valor do nome é armazenado em uma variável local chamada "nome", e logo o valor contido na variável "nome" é usado para ser exibido.Lendo um número inteiro com ScannerVamos agora criar um programa que leia a idade do usuário e a exiba:System.out.println("Digite sua idade: ");int idade = entrada.nextInt();System.out.println("Sua idade é: ");System.out.println(idade);Assim como o método next(), o método nextInt() também aguardará uma entrada do usuário e o pressionamento da tecla Enter para que o programa prossiga sua execução. Porém, o método nextInt exige que o usuário digite apenas números, nada de letras ou caracteres especiais.VARIÁVEIS LOCAIS...As variáveis locais serão melhor abordadas no próximo Post.  Como você deve ter percebido, uma variável local armazena um valor, assim como um atributo de uma classe. Na verdade, um atributo é uma variável, porém pertencente à classe em questão, diferentemente de uma variável local, que possui tempo de vida limitado e não pertence a uma classe.RESUMO  * Scanner pertence ao pacote java.util   * Você aprendeu a criar um objeto do tipo Scanner:                       Scanner entrada = new Scanner(System.in);  * Para capturar uma entrada de texto do teclado usa-se o método next():           entrada.next();  * Para capturar uma entrada numérica usa-se:          entrada.nextInt() para capturar números inteiros          entrada.nextFloat() para capturar números reais          entrada.nextDouble() para capturar números reais com dupla precisãoExercícios 1. Construa um programa que leia o nome e a idade do usuário e exiba-os logo em seguida.2. Construa um programa que leia o nome e o sobrenome do usuário e exiba-os logo em seguida.3. Construa um programa que leia a altura do usuário e exiba-a na tela.Ficamos por aqui. Até a próxima