1. Leitura do console, System.in
Nas aulas anteriores, conhecemos os comandos de saída na tela. Para isso, usamos o objeto System.out e seus métodos print() e println(). Simples e prático.
Mas, como você provavelmente já imagina, apenas imprimir na tela não é suficiente. O objetivo da maioria dos programas — fazer algo útil para o usuário. Por isso, é muito comum precisar que o usuário possa digitar dados pelo teclado.
Assim como para a saída, para a entrada de dados também existe um objeto específico — System.in. Mas, infelizmente para nós, ele não é tão conveniente quanto gostaríamos. Esse objeto permite ler dados do teclado, mas apenas um caractere por vez.
Por isso, usaremos mais uma classe que, em conjunto com o objeto System.in, nos dará tudo de que precisamos. Em Java já existem, há muito tempo, classes para todos os casos. E agora vamos conhecer uma delas.
2. A classe Scanner
A classe Scanner (nome completo java.util.Scanner) sabe ler dados de diferentes fontes: console, arquivos, Internet. Se quisermos que ela leia dados do teclado, devemos passar o objeto System.in como parâmetro — a fonte de dados. O objeto do tipo Scanner então decidirá o que fazer com isso.
A leitura pelo teclado com um objeto do tipo Scanner ficará mais ou menos assim:
| Código | Explicação |
|---|---|
|
Criamos um objeto da classe Scanner. Lemos do teclado uma linha de texto. Lemos do teclado um número. |
Parece simples, mas será que é mesmo?
Acho que você já tem um monte de perguntas, e agora vamos respondê-las.
Mas, antes de tudo, vamos demonstrar um exemplo de programa completo que usa a classe Scanner:
void main()
{
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
3. Criação de um objeto Scanner
Primeira pergunta — o que é esta linha Scanner console = new Scanner(System.in);?
Uma linha como essa pode confundir, porém você vai encontrar coisas parecidas o tempo todo. Então acho que é hora de explicar o que está escrito aqui.
Vamos lembrar como normalmente criamos uma variável com texto:
String str = "texto";
Primeiro escrevemos o tipo da variável (String), depois o seu nome (str) e, por fim, após o sinal de igual, escrevemos o valor.
Na nossa linha “estranha”, na verdade é a mesma coisa:
Scanner console = new Scanner(System.in);
Tudo o que está à esquerda do sinal de igual — é a declaração de uma variável do tipo Scanner chamada console. Poderíamos chamá-la, por exemplo, s ou scanner, ou até keyboard. Então o código ficaria assim:
Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();
Acho que agora ficou bem mais claro.
Já o código que está à direita do sinal de igual é um pouco mais complexo. Refiro-me a new Scanner(System.in); Mas também não há nada de outro mundo.
Nesse código, dizemos à máquina Java: crie um novo objeto (palavra new) do tipo Scanner e passe para ele, como parâmetro, aquilo de onde o novo objeto Scanner vai obter os dados — o objeto System.in.
Após a execução dessa linha inteira, teremos uma variável chamada console do tipo Scanner, com a qual nosso programa poderá ler dados do teclado.
4. Chamada de métodos
No exemplo acima, nossa variável console do tipo Scanner guardava internamente uma referência a um objeto do tipo Scanner.
Para chamar os métodos do objeto ao qual a variável se refere, é preciso escrever um ponto após o nome da variável e, em seguida, o nome do método e os parâmetros. A forma geral desse comando é:
peremennaya.metod(parametry);
Exemplos:
System.out.println("Olá");
System.out.println(1);
Se você não pretende passar parâmetros para a função, basta escrever parênteses vazios:
peremennaya.metod();
Exemplo:
System.out.println();
5. Entrada de dados pelo console
Ler dados do teclado, quando temos um objeto do tipo Scanner, é muito fácil.
Para ler do teclado uma linha, use o comando:
String str = console.nextLine();
Quando o programa chegar à execução dessa linha, ele será pausado e aguardará até que o usuário digite os dados e pressione a tecla Enter. Depois disso, tudo o que o usuário digitou será salvo na variável str.
Para ler do teclado um número inteiro, use o comando:
int number = console.nextInt();
Aqui tudo é análogo ao comando anterior. Quando o programa chegar à execução dessa linha, ele será pausado e aguardará até que o usuário digite os dados e pressione a tecla Enter. Depois disso, tudo o que o usuário digitou será convertido para número e salvo na variável number.
Se o usuário inserir dados que não possam ser convertidos para um número inteiro, ocorrerá um erro no programa e ele será encerrado.
Para ler do teclado um número de ponto flutuante, use o comando:
double number = console.nextDouble();
Esse comando é totalmente análogo ao nextInt(), apenas verifica se os dados informados podem ser convertidos para um número double.
Exemplo de um programa que lê dois números do teclado e imprime sua soma:
void main()
{
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
System.out.println(a + b);
}
Observação
O usuário pode digitar vários números em uma única linha, separando-os por espaços: essa situação será tratada corretamente pelos métodos da classe Scanner. No entanto, os números só serão lidos pelo programa depois que o usuário pressionar Enter.
GO TO FULL VERSION