3 Variáveis, tipos, texto e entrada de dados
Representar informações antes de tomar decisões
3.1 Objetivos de aprendizagem
Ao concluir este capítulo, você deverá ser capaz de:
- declarar, inicializar e atualizar variáveis;
- escolher tipos coerentes com o problema;
- manipular e comparar textos corretamente;
- ler entradas com
Scannere converter texto em número; - reconhecer conversões que podem perder informação.
3.2 Variáveis e tipos
Uma variável associa um nome a um valor de determinado tipo:
Em Java, declaração, inicialização e atribuição são momentos diferentes:
Os oito tipos primitivos são byte, short, int, long, float, double, char e boolean. Para começar, int, double, char e boolean resolvem a maioria dos exercícios. String não é um tipo primitivo: é uma classe usada para representar texto.
Prefira nomes que expressem intenção, como quantidadeTentativas e comandoValido.
3.3 Precisão e conversões numéricas
Use tipos inteiros para contagens e tipos decimais para medidas e médias. Valores monetários reais exigem cuidados adicionais; em sistemas financeiros, normalmente se usa BigDecimal, não double.
A divisão entre dois inteiros produz um resultado inteiro:
Converter de um tipo de maior capacidade para outro menor pode descartar informação:
Não faça um casting apenas para “o código compilar”. Antes, verifique se a perda de precisão é aceitável.
3.4 Trabalhando com texto
Strings são imutáveis: métodos como strip e toLowerCase devolvem um novo texto.
Para comparar conteúdo, use equals ou equalsIgnoreCase. O operador == compara referências e não deve ser usado para decidir se dois textos têm o mesmo conteúdo.
Em Java moderno, isBlank() verifica se um texto está vazio ou contém apenas espaços.
3.5 Entrada com Scanner
Uma estratégia previsível consiste em ler toda entrada com nextLine() e converter números quando necessário. Isso evita a quebra de linha pendente causada pela combinação de nextInt() e nextLine().
import java.util.Scanner;
public class Capitulo02Entrada {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
System.out.print("Seu nome: ");
String nome = scanner.nextLine().strip();
System.out.print("Sua idade: ");
int idade = Integer.parseInt(scanner.nextLine());
System.out.printf("Olá, %s! Idade registrada: %d.%n", nome, idade);
}
}
}Se a idade não estiver em formato numérico, Integer.parseInt lançará NumberFormatException. O tratamento desse caso será desenvolvido no capítulo de exceções.
3.6 Evolução do projeto: versão 2
O chatbot agora pergunta o nome da pessoa e apresenta uma saudação personalizada. Armazene:
- nome da pessoa, como
String; - total de mensagens, como
int; - estado da conversa, como
boolean.
O exemplo completo está em examples/src/Capitulo02Entrada.java.
3.7 Prática verificável
Crie um programa que leia nome, cidade e quantidade semanal de horas de estudo. Em seguida, mostre uma frase completa.
Casos de teste:
| Entrada | Resultado esperado |
|---|---|
Ana, Maceió, 6 |
a frase contém os três valores |
| nome com espaços nas bordas | os espaços externos não aparecem |
horas iguais a 0 |
o programa aceita o valor e o exibe |
Desafio: calcule a carga de estudo em quatro semanas, mantendo o cálculo em uma variável separada.
Ainda não trate texto não numérico. Primeiro observe a exceção; depois você implementará uma recuperação controlada.