Nesta aula, vamos revisar e aprofundar os conceitos de estruturas de controle, com ênfase em exemplos práticos e na aplicação de múltiplas estruturas em conjunto.
A estrutura if-else if-else permite avaliar múltiplas condições em sequência, executando o bloco correspondente à primeira condição verdadeira.
public class CalculadoraDeNotas {
public static void main(String[] args) {
// Calculando a média e determinando o conceito
double nota1 = 8.5;
double nota2 = 7.0;
double nota3 = 9.0;
// Calculando a média
double media = (nota1 + nota2 + nota3) / 3;
// Exibindo a média com duas casas decimais
System.out.printf("Média: %.2f\n", media);
// Determinando o conceito
System.out.print("Conceito: ");
if (media >= 9.0) {
System.out.println("A (Excelente)");
} else if (media >= 8.0) {
System.out.println("B (Muito Bom)");
} else if (media >= 7.0) {
System.out.println("C (Bom)");
} else if (media >= 6.0) {
System.out.println("D (Regular)");
} else if (media >= 5.0) {
System.out.println("E (Recuperação)");
} else {
System.out.println("F (Reprovado)");
}
// Verificando se o aluno foi aprovado
if (media >= 6.0) {
System.out.println("Situação: Aprovado");
} else if (media >= 5.0) {
System.out.println("Situação: Em recuperação");
} else {
System.out.println("Situação: Reprovado");
}
}
}
Média: 8,17
Conceito: B (Muito Bom)
Situação: Aprovado
As estruturas while e do-while são semelhantes, mas têm uma diferença fundamental: o do-while sempre executa o bloco pelo menos uma vez.
public class ComparacaoWhileDoWhile {
public static void main(String[] args) {
// Exemplo com while
System.out.println("Exemplo com while:");
int contador1 = 5;
while (contador1 < 5) { // Condição falsa desde o início
System.out.println("O contador vale: " + contador1);
contador1++;
}
System.out.println("Após o while, contador1 = " + contador1);
// Exemplo com do-while
System.out.println("\nExemplo com do-while:");
int contador2 = 5;
do { // Executa pelo menos uma vez, mesmo com condição falsa
System.out.println("O contador vale: " + contador2);
contador2++;
} while (contador2 < 5);
System.out.println("Após o do-while, contador2 = " + contador2);
// Exemplo com do-while e break
System.out.println("\nExemplo com do-while e break:");
int numero = 1;
do {
System.out.println("Número: " + numero);
// Saindo do loop quando o número for 5
if (numero == 5) {
System.out.println("Encontrei o 5! Saindo do loop...");
break;
}
numero++;
} while (true); // Loop infinito interrompido pelo break
}
}
Exemplo com while:
Após o while, contador1 = 5
Exemplo com do-while:
O contador vale: 5
Após o do-while, contador2 = 6
Exemplo com do-while e break:
Número: 1
Número: 2
Número: 3
Número: 4
Número: 5
Encontrei o 5! Saindo do loop...
Observação: No primeiro exemplo com while, o bloco de código não é executado porque a condição (contador1 < 5) já é falsa desde o início. No segundo exemplo com do-while, o bloco de código é executado uma vez, mesmo com a condição (contador2 < 5) sendo falsa inicialmente.
Java oferece duas formas principais de percorrer arrays: o for tradicional e o for-each (enhanced for).
for-each percorrendo o array
numeros ({10, 20, 30, 40, 50}).
A cada iteração, a variável numero recebe
o próximo valor do array — note que não é necessário
manipular o índice i, ao contrário do
for tradicional.
public class ManipulacaoArrays {
public static void main(String[] args) {
// Declarando e inicializando um array de inteiros
int[] numeros = {10, 20, 30, 40, 50};
// Percorrendo o array com for tradicional
System.out.println("Percorrendo com for tradicional:");
for (int i = 0; i < numeros.length; i++) {
System.out.println("Índice " + i + ": " + numeros[i]);
}
// Percorrendo o array com for-each (enhanced for)
System.out.println("\nPercorrendo com for-each:");
for (int numero : numeros) {
System.out.println("Valor: " + numero);
}
// Manipulando um array com for tradicional
System.out.println("\nMultiplicando cada elemento por 2:");
for (int i = 0; i < numeros.length; i++) {
numeros[i] = numeros[i] * 2;
System.out.println("Índice " + i + ": " + numeros[i]);
}
// Somando todos os elementos do array
int soma = 0;
for (int numero : numeros) {
soma += numero;
}
System.out.println("\nSoma de todos os elementos: " + soma);
// Encontrando o maior valor no array
int maior = numeros[0]; // Assume que o primeiro elemento é o maior
for (int i = 1; i < numeros.length; i++) {
if (numeros[i] > maior) {
maior = numeros[i];
}
}
System.out.println("Maior valor no array: " + maior);
}
}
Percorrendo com for-each:
Valor: 10
Valor: 20
Valor: 30
Valor: 40
Valor: 50
Multiplicando cada elemento por 2:
Índice 0: 20
Índice 1: 40
Índice 2: 60
Índice 3: 80
Índice 4: 100
Soma de todos os elementos: 300
Maior valor no array: 100
Dica:
É comum combinar diferentes estruturas de controle, aninhando-as para criar lógicas mais complexas.
public class EstruturasAninhadas {
public static void main(String[] args) {
// Exemplo: classificação de números
System.out.println("Classificação de números de 1 a 10:");
for (int i = 1; i <= 10; i++) {
System.out.print(i + " é ");
// Verificando se é par ou ímpar
if (i % 2 == 0) {
System.out.print("par");
} else {
System.out.print("ímpar");
}
// Verificando se é primo
boolean ehPrimo = true;
// Números menores que 2 não são primos
if (i < 2) {
ehPrimo = false;
} else {
// Verificando divisibilidade de 2 até i-1
for (int j = 2; j < i; j++) {
if (i % j == 0) {
ehPrimo = false;
break;
}
}
}
if (ehPrimo) {
System.out.print(" e primo");
}
System.out.println(".");
}
// Exemplo: matriz de multiplicação
System.out.println("\nMatriz de multiplicação 5x5:");
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
int resultado = i * j;
// Formatando a saída para alinhar os números
if (resultado < 10) {
System.out.print(" "); // Adiciona um espaço para números com um dígito
}
System.out.print(resultado + " ");
}
System.out.println(); // Nova linha após cada linha da matriz
}
}
}
Classificação de números de 1 a 10:
1 é ímpar e primo.
2 é par e primo.
3 é ímpar e primo.
4 é par.
5 é ímpar e primo.
6 é par.
7 é ímpar e primo.
8 é par.
9 é ímpar.
10 é par.
Matriz de multiplicação 5x5:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
Combinando a estrutura switch com a classe Scanner, podemos criar menus interativos para nossos programas.
import java.util.Scanner;
public class MenuInterativo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int opcao;
do {
// Exibindo o menu
System.out.println("\n===== MENU =====");
System.out.println("1. Calcular área do círculo");
System.out.println("2. Calcular área do retângulo");
System.out.println("3. Calcular área do triângulo");
System.out.println("4. Sair");
System.out.print("Escolha uma opção: ");
// Lendo a opção do usuário
opcao = scanner.nextInt();
// Processando a opção com switch
switch (opcao) {
case 1:
// Cálculo da área do círculo
System.out.print("Digite o raio do círculo: ");
double raio = scanner.nextDouble();
double areaCirculo = Math.PI * Math.pow(raio, 2);
System.out.printf("Área do círculo: %.2f unidades quadradas\n", areaCirculo);
break;
case 2:
// Cálculo da área do retângulo
System.out.print("Digite a base do retângulo: ");
double base = scanner.nextDouble();
System.out.print("Digite a altura do retângulo: ");
double altura = scanner.nextDouble();
double areaRetangulo = base * altura;
System.out.printf("Área do retângulo: %.2f unidades quadradas\n", areaRetangulo);
break;
case 3:
// Cálculo da área do triângulo
System.out.print("Digite a base do triângulo: ");
double baseTriangulo = scanner.nextDouble();
System.out.print("Digite a altura do triângulo: ");
double alturaTriangulo = scanner.nextDouble();
double areaTriangulo = (baseTriangulo * alturaTriangulo) / 2;
System.out.printf("Área do triângulo: %.2f unidades quadradas\n", areaTriangulo);
break;
case 4:
System.out.println("Saindo do programa...");
break;
default:
System.out.println("Opção inválida! Tente novamente.");
}
} while (opcao != 4); // O loop continua até o usuário escolher sair (opção 4)
// Fechando o scanner
scanner.close();
System.out.println("Programa encerrado!");
}
}
===== MENU =====
1. Calcular área do círculo
2. Calcular área do retângulo
3. Calcular área do triângulo
4. Sair
Escolha uma opção: 2
Digite a base do retângulo: 10
Digite a altura do retângulo: 5
Área do retângulo: 50,00 unidades quadradas
===== MENU =====
1. Calcular área do círculo
2. Calcular área do retângulo
3. Calcular área do triângulo
4. Sair
Escolha uma opção: 4
Saindo do programa...
Programa encerrado!
As estruturas de controle podem ser usadas dentro de métodos para criar código mais organizado e reutilizável.
public class ControleDentroDeMetodos {
public static void main(String[] args) {
// Chamando métodos que usam diferentes estruturas de controle
imprimirTabuada(7);
int[] valores = {12, 5, 8, 21, 13, 6};
separarParesImpares(valores);
verificarPositivoNegativoZero(10);
verificarPositivoNegativoZero(-5);
verificarPositivoNegativoZero(0);
}
// Método que usa for para imprimir a tabuada de um número
public static void imprimirTabuada(int numero) {
System.out.println("Tabuada do " + numero + ":");
for (int i = 1; i <= 10; i++) {
System.out.println(numero + " x " + i + " = " + (numero * i));
}
System.out.println(); // Linha em branco para separar
}
// Método que usa for-each e if-else para separar pares e ímpares
public static void separarParesImpares(int[] numeros) {
System.out.println("Separando pares e ímpares:");
System.out.print("Números pares: ");
for (int num : numeros) {
if (num % 2 == 0) {
System.out.print(num + " ");
}
}
System.out.print("\nNúmeros ímpares: ");
for (int num : numeros) {
if (num % 2 != 0) {
System.out.print(num + " ");
}
}
System.out.println("\n"); // Duas linhas em branco para separar
}
// Método que usa if-else-if para verificar se um número é positivo, negativo ou zero
public static void verificarPositivoNegativoZero(int numero) {
System.out.print("O número " + numero + " é ");
if (numero > 0) {
System.out.println("positivo.");
} else if (numero < 0) {
System.out.println("negativo.");
} else {
System.out.println("zero.");
}
}
}
Tabuada do 7:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
Separando pares e ímpares:
Números pares: 12 8 6
Números ímpares: 5 21 13
O número 10 é positivo.
O número -5 é negativo.
O número 0 é zero.
Teste seus conhecimentos sobre as estruturas de controle em Java:
Reforce o conteúdo desta aula com mais dois exercícios práticos: