A maratona do Java: 5 exercícios para dominar a sintaxe e a JVM

Rocketseat

Rocketseat

5 min de leitura
java
Bora pra cima! Se você está explorando o ecossistema Java, já percebeu que a curva de aprendizado exige muito mais do que apenas decorar comandos. Exige entender de verdade como a JVM (Java Virtual Machine) organiza os dados.
Para você não travar na largada, juntei os 5 exercícios fundamentais com as dicas táticas de código para fugir das armadilhas que travam a compilação. Vamos colocar o seu código no "shape" certo.

1. Variáveis e o fluxo de entrada no cálculo do IMC

O primeiro passo é dominar a tipagem. Diferente de linguagens dinâmicas, aqui cada bit alocado em memória conta.
  • Usamos o tipo double para garantir precisão decimal total no cálculo.
  • A classe Scanner entra para gerenciar o fluxo de entrada, separando um script estático de um software interativo.
  • O pulo do gato aqui é não deixar o buffer sujo ao misturar números e textos.
💡
Dica de ouro: Quando você captura um número com nextDouble() e depois tenta capturar uma string, o "Enter" fica preso no buffer. Faça uma leitura vazia com nextLine() no meio do caminho para limpar o fluxo e não quebrar a jornada do usuário.
import java.util.Scanner; public class CalculadoraImc { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Digite seu peso: "); double peso = scanner.nextDouble(); // O pulo do gato: limpando o buffer do teclado scanner.nextLine(); System.out.print("Digite seu nome: "); String nome = scanner.nextLine(); System.out.println(nome + ", seu peso é " + peso); scanner.close(); } }

2. Assumindo o controle de fluxo com a tabuada dinâmica

Estruturas de repetição (for, while) são o coração pulsante da automação de processos. O desafio real não é só multiplicar números, mas sim controlar o estado da nossa aplicação.
  • Aprenda a implementar condições de parada precisas (como digitar "Sair").
  • Mantenha o serviço rodando em background apenas até que a condição seja atendida.
  • Autonomia técnica nasce quando você domina quando iniciar e quando matar um processo.
"A grande sacada não é simplesmente saber criar um loop, mas sim dominar a hora exata de interrompê-lo. Uma estrutura de repetição mal controlada derruba a performance de qualquer servidor e destrói a retenção do usuário na ponta final."
Se você ainda escorrega nesses fundamentos, dá um passo atrás e devora este guia sobre lógica de programação para iniciantes no nosso blog.

3. Estruturas de dados e o limite invisível dos arrays

Arrays em Java têm um tamanho cravado na criação. Isso obriga a gente a ter uma disciplina absurda com a memória.
  • Ao construir um analisador de notas, você pratica algoritmos clássicos de busca e acumulação.
  • Tente resolver a lógica percorrendo o array uma única vez..
  • Uma latência menor no backend reflete diretamente em um carregamento mais rápido e, consequentemente, em mais conversão no seu produto.
⚠️
Os índices sempre começam no zero. Tentar acessar uma posição além do tamanho fixo vai estourar a famosa ArrayIndexOutOfBoundsException. Use sempre < e nunca <= ao iterar com array.length.
public class AnaliseNotas { public static void main(String[] args) { double[] notas = {8.5, 7.0, 9.2}; // Iterando do jeito certo para não estourar o limite da memória for (int i = 0; i < notas.length; i++) { System.out.println("Nota " + (i + 1) + ": " + notas[i]); } } }

4. Manipulação de strings e a armadilha da igualdade

No ecossistema Java, strings são objetos complexos, não apenas listinhas de caracteres.
  • O exercício de validação de senhas explora a robustez do pacote java.lang.
  • Usar Character.isUpperCase() e Character.isDigit() é a base para processar textos com segurança.
  • Nunca compare o valor de duas strings usando o sinal de igualdade (==).
A grande sacada aqui é entender que o == compara o endereço de memória, não o texto. Para comparar o conteúdo real, use o .equals(). E para não reinventar a roda, mantenha a documentação oficial da Oracle aberta na sua segunda tela.
public class ValidadorSenha { public static void main(String[] args) { String senhaDigitada = new String("admin123"); String senhaCorreta = "admin123"; // O jeito "shape" e seguro de comparar textos no Java if (senhaDigitada.equals(senhaCorreta)) { System.out.println("Acesso liberado com segurança!"); } } }

5. O salto definitivo para a orientação a objetos (POO)

É no último nível que a linguagem brilha e sua arquitetura ganha robustez. Ao criar um sistema de inventário, nós deixamos a programação procedural para trás e passamos a modelar o mundo real.
  • O encapsulamento garante que os dados sensíveis fiquem blindados.
  • A classe Produto assume a responsabilidade pelas próprias regras de estoque.
  • Lembre-se: declarar uma variável não cria o objeto. Você precisa usar o new para não tomar um NullPointerException na cara.
class Produto { String nome; public void exibir() { System.out.println("Produto em estoque: " + nome); } } public class Inventario { public static void main(String[] args) { // Criando a instância real na memória antes de usar Produto teclado = new Produto(); teclado.nome = "Teclado Mecânico"; teclado.exibir(); } }
A jornada é longa, mas a consistência sempre vence a intensidade. Pegue esse código, quebre ele no seu ambiente local e aprenda a ler os logs. E se quiser ver como a POO escala em frameworks de altíssimo nível no mercado, baixe nosso material focado e descubra tudo por dentro de uma aplicação Spring Boot.
 

Conheça o Rocketseat Para Empresas

Oferecemos soluções personalizadas para empresas de todos os portes.

Rocketseat

Rocketseat

Ecossistema de educação contínua referência em programação e Inteligência Artificial.

Artigos_

Explore conteúdos relacionados

Descubra mais artigos que complementam seu aprendizado e expandem seu conhecimento.

Imagem contendo uma carta e um símbolo de check
NewsletterReceba conteúdos inéditos e novidades gratuitamente
Mês do programador na Rocketseat

Válido por tempo limitado

Aprenda as tecnologias e habilidades mais valorizadas no mercado dev