Pular para o conteúdo

Controle de Fluxo

Para exibir informações na tela, Java usa System.out. Há três variações:

System.out.println("Com quebra de linha");
System.out.print("Sem quebra de linha");
System.out.printf("Formatado: %s tem %d anos%n", "Ana", 25);

O printf aceita especificadores de formato como %s (String), %d (inteiro), %f (decimal) e %n (nova linha).

Para ler dados do teclado, usa-se a classe Scanner do pacote java.util:

import java.util.Scanner;
public class EntradaDados {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Digite seu nome: ");
String nome = scanner.nextLine();
System.out.print("Digite sua idade: ");
int idade = scanner.nextInt();
System.out.println("Olá, " + nome + "! Você tem " + idade + " anos.");
scanner.close();
}
}
MétodoTipo lido
nextLine()String (linha)
next()String (palavra)
nextInt()int
nextDouble()double
nextBoolean()boolean

Atenção: nextInt() e similares não consomem a quebra de linha. Se quiser ler uma String depois, chame scanner.nextLine() uma vez antes para limpar o buffer.

int numero = scanner.nextInt();
scanner.nextLine(); // limpa o \n residual
String texto = scanner.nextLine(); // agora funciona

Executa blocos de código com base em condições:

int nota = 75;
if (nota >= 90) {
System.out.println("Aprovado com distinção");
} else if (nota >= 60) {
System.out.println("Aprovado");
} else {
System.out.println("Reprovado");
}

As condições são expressões booleanas - qualquer combinação de operadores relacionais e lógicos é válida:

int idade = 20;
boolean temCarteira = true;
if (idade >= 18 && temCarteira) {
System.out.println("Pode dirigir");
}

Útil quando há múltiplos casos baseados em um único valor:

int diaSemana = 3;
switch (diaSemana) {
case 1:
System.out.println("Segunda-feira");
break;
case 2:
System.out.println("Terça-feira");
break;
case 3:
System.out.println("Quarta-feira");
break;
default:
System.out.println("Outro dia");
}

O break é obrigatório para evitar que a execução “caia” no próximo case (fall-through). O default é executado quando nenhum case corresponde.

A partir do Java 7, switch aceita Strings:

String cor = "vermelho";
switch (cor) {
case "vermelho":
System.out.println("Pare");
break;
case "verde":
System.out.println("Siga");
break;
default:
System.out.println("Atenção");
}

A sintaxe moderna com -> elimina o break e pode retornar um valor:

String resultado = switch (diaSemana) {
case 1 -> "Segunda-feira";
case 2 -> "Terça-feira";
case 3 -> "Quarta-feira";
case 4 -> "Quinta-feira";
case 5 -> "Sexta-feira";
default -> "Final de semana";
};

Ideal quando o número de iterações é conhecido:

for (int i = 0; i < 5; i++) {
System.out.println("Iteração: " + i);
}

A estrutura tem três partes: inicialização, condição e incremento. Qualquer uma delas pode ser omitida:

// Loop infinito (cuidado)
for (;;) {
// ...
}

Forma simplificada para iterar sobre arrays e coleções:

int[] numeros = {10, 20, 30, 40, 50};
for (int numero : numeros) {
System.out.println(numero);
}

Não dá acesso ao índice, mas é mais legível quando ele não é necessário.

Repete enquanto a condição for verdadeira. A condição é verificada antes de cada iteração:

int contador = 0;
while (contador < 5) {
System.out.println("Contador: " + contador);
contador++;
}

Útil quando não se sabe de antemão quantas iterações serão necessárias:

Scanner scanner = new Scanner(System.in);
String entrada = "";
while (!entrada.equals("sair")) {
System.out.print("Digite algo (ou 'sair' para encerrar): ");
entrada = scanner.nextLine();
System.out.println("Você digitou: " + entrada);
}

Garante que o bloco seja executado pelo menos uma vez, pois a condição é verificada após a execução:

int numero;
Scanner scanner = new Scanner(System.in);
do {
System.out.print("Digite um número entre 1 e 10: ");
numero = scanner.nextInt();
} while (numero < 1 || numero > 10);
System.out.println("Número válido: " + numero);

break interrompe o loop imediatamente:

for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // para ao chegar no 5
}
System.out.println(i);
}

continue pula para a próxima iteração sem executar o resto do bloco:

for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // pula os números pares
}
System.out.println(i); // imprime só os ímpares
}

Um programa que lê números do usuário até que ele digite zero, e ao final exibe a soma e a média:

import java.util.Scanner;
public class Estatisticas {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int soma = 0;
int quantidade = 0;
System.out.println("Digite números (0 para encerrar):");
while (true) {
int numero = scanner.nextInt();
if (numero == 0) {
break;
}
soma += numero;
quantidade++;
}
if (quantidade > 0) {
double media = (double) soma / quantidade;
System.out.println("Soma: " + soma);
System.out.printf("Média: %.2f%n", media);
} else {
System.out.println("Nenhum número informado.");
}
scanner.close();
}
}