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 Scanner e converter texto em número;
  • reconhecer conversões que podem perder informação.

3.2 Variáveis e tipos

Diagrama de uma variável chamada idade, do tipo int, contendo o valor 19.

Uma variável relaciona nome, tipo e valor.

Uma variável associa um nome a um valor de determinado tipo:

String nomeUsuario = "Ana";
int idade = 19;
double media = 8.5;
boolean estudanteAtivo = true;

Em Java, declaração, inicialização e atribuição são momentos diferentes:

int totalMensagens;     // declaração
totalMensagens = 1;     // inicialização
totalMensagens = 2;     // nova atribuição

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:

int acertos = 7;
int questoes = 10;

double taxaIncorreta = acertos / questoes;          // 0.0
double taxaCorreta = (double) acertos / questoes;   // 0.7

Converter de um tipo de maior capacidade para outro menor pode descartar informação:

double media = 8.75;
int parteInteira = (int) media; // resultado: 8

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.

String entrada = "  AJUDA  ";
String comando = entrada.strip().toLowerCase();

System.out.println(comando); // ajuda

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.

if (comando.equals("ajuda")) {
    System.out.println("Comandos: ajuda, dica e sair.");
}

Em Java moderno, isBlank() verifica se um texto está vazio ou contém apenas espaços.

3.5 Entrada com Scanner

Dois estudantes conversam sobre uma variável cujo valor muda, mas cujo tipo continua inteiro.

Quadrinho: variáveis não são caixas mágicas.

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.

AvisoLimite deste capítulo

Ainda não trate texto não numérico. Primeiro observe a exceção; depois você implementará uma recuperação controlada.