Olá, meu nome é Jacqueline Oliveira, sou engenheira de software e instrutora na Alura.
Audiodescrição: Jacqueline é uma mulher de pele branca, com cabelos longos e reflexos loiros. Usa uma camiseta amarela e maquiagem leve. Na sua frente há um microfone. Ao fundo, uma parede lisa com iluminação azul e ao lado direito uma prateleira com vasos de planta, livros e itens de decoração.
Uma estrutura fundamental no desenvolvimento de aplicações são os laços de repetição. Muitas vezes, lidamos com grandes volumes de dados e precisaremos executar uma determinada ação para cada um deles. Por exemplo, em uma empresa com 500 funcionários, calcular manualmente a comissão de cada um seria inviável. Em vez disso, utilizamos uma aplicação para realizar esse processo de forma eficiente, reduzindo o risco de erros e garantindo rapidez.
Os laços de repetição permitem automatizar essas execuções dentro do código. Sua lógica é simples: enquanto a condição for verdadeira, a ação será repetida. Quando a condição se tornar falsa, o laço será interrompido. É essencial garantir um ponto de parada para evitar o chamado loop infinito, que ocorre quando a condição nunca muda, impedindo a saída do laço.
Em Java, contamos com três tipos de laços de repetição: for
, while
e do{} while()
. Cada um possui uma sintaxe específica, que veremos tanto de forma teórica quanto aplicada no código.
O laço for
segue uma estrutura com três elementos essenciais: ponto de inicialização, condição de execução e atualização. Esses elementos determinam quando o laço inicia, até quando será executado e como a variável de controle será atualizada a cada iteração.
Ao trabalhar com iteradores, declaramos uma variável de iteração, geralmente iniciando em zero. Definimos a condição com base no tamanho da lista de funcionários e atualizamos a variável de um em um (por exemplo, funcionário 1, funcionário 2, funcionário 3). Esse processo permite calcular a comissão de cada funcionário de forma automatizada.
O for
é especialmente útil quando sabemos a condição final. Mesmo que a lista contenha 5 ou 500 funcionários, a condição de parada será sempre o tamanho da lista, garantindo um controle eficiente do fluxo de execução.
O laço while
é ideal para situações em que não sabemos previamente o número de repetições necessárias. Por exemplo, ao cadastrar funcionários, podemos definir que, enquanto a ação de cadastro for verdadeira, o bloco de código será executado. A cada iteração, solicitamos os dados e perguntamos se deseja cadastrar outro funcionário. Como não há um número fixo de repetições, o laço pode ser executado uma ou duzentas vezes, dependendo das respostas.
Uma variação do while
é o do{} while()
. A principal diferença entre eles está na ordem de execução da condição. No while
, a condição é verificada antes de entrar no bloco de código, podendo impedir sua execução caso já seja falsa na primeira verificação. Já no do{} while()
, o bloco de código é executado pelo menos uma vez antes da verificação da condição, garantindo que a ação ocorra ao menos uma vez antes de uma possível interrupção.
Esses são os três laços mais comuns que utilizamos. Agora, vamos fazer uma análise prática. Para isso, abrimos a IDE, onde já temos um código pronto. Um deles é o método calcularComissao()
, onde recebemos por argumento um total de vendas e, baseado no valor, aplicamos um percentual, seja 3%, 5% ou 7%.
package br.com.alura;
public class Principal {
public static void main(String[] args) {
String[] vendedores = {"Carlos", "Mariana", "João", "Fernanda"};
double[] vendas = {4000.00, 8000.00, 12000.00, 5000.00};
}
}
public static double calcularComissao(double totalVendas) {
if (totalVendas <= 5000) {
return totalVendas * 0.03;
} else if (totalVendas <= 10000) {
return totalVendas * 0.05;
} else {
return totalVendas * 0.07;
}
}
No método principal, main
, temos dois arrays: um com nomes de vendedores, contendo quatro vendedores, e outro com valores de vendas, também com quatro valores, representando as vendas de cada uma dessas pessoas. Por exemplo, 4 mil são as vendas do Carlos, 8 mil da Mariana, 12 mil do João e 5 mil da Fernanda.
for()
Precisamos calcular a comissão, então percorremos essa lista e chamamos o método calcularComissao()
para que ele faça o cálculo. Vamos começar usando o for
. Na IDE, temos um facilitador: ao digitar for
, ele nos oferece opções para criar o esqueleto, uma prévia, também chamada de code snippet. Então, chamaremos o for i
.
Quando utilizamos for i
, criamos uma estrutura que já é familiar, onde i
é um iterador comum em laços de repetição. A condição inicial é int i = 0
, e a condição de parada é o tamanho da lista, como vendedores.length
. O incremento é feito a cada iteração, passando pelas posições zero, um, dois, três, e assim por diante. No for
, isso é feito automaticamente, mas no while
ou do{} while()
, precisamos incrementar manualmente.
Para formatar a saída, utilizamos System.out.printf()
. Nos parênteses, dentro de aspas duplas, passamos %s - comissão %.2f
, para formatar com duas casas decimais. O primeiro argumento substitui %s
com vendedores[i]
, e o segundo substitui %.2f
com o valor da comissão calculada pelo método calcularComissao(vendas[i])
.
package br.com.alura;
public class Principal {
public static void main(String[] args) {
String[] vendedores = {"Carlos", "Mariana", "João", "Fernanda"};
double[] vendas = {4000.00, 8000.00, 12000.00, 5000.00};
for (int i = 0; i < vendedores.length; i++) {
System.out.printf("%s - comissão %.2f\n", vendedores[i], calcularComissao(vendas[i]));
}
}
public static double calcularComissao(double totalVendas) {
if (totalVendas <= 5000) {
return totalVendas * 0.03;
} else if (totalVendas <= 10000) {
return totalVendas * 0.05;
} else {
return totalVendas * 0.07;
}
}
}
Feito isso, clicamos no ícone de "Play", na lateral superior direita para executar o código. Assim, temos ao seguinte retorno:
Carlos - comissão 120,00
Mariana - comissão 1400,00
João - comissão 840,00
Fernanda - comissão 150,00
Foi rápido realizar essa tarefa para quatro pessoas, e o mesmo aconteceria para quinhentas. Bastou programar um laço de repetição com uma instrução clara. Essa é a grande vantagem dos laços de repetição: automatizar processos e otimizar o tempo de execução.
while
Vamos agora testar com while
. Para isso, abaixo e fora do for ()
, escrevemos System.out.prontln("\n Testanto com while")
. Para conseguirmos fazer esse teste, precisamos de um novo iterador.
Criamos um novo iterador int j = 0
e uma variável booleana boolean imprimeOutro = true
. Na linha abaixo, escrevemos while(imprimeOutro) {}
.
Nas chaves, passamos o mesmo código que criamos anteriormente. Então, o copiamos e colamos. Feito isso, fazemos as mudanças necessárias, mudando de [i]
para [j]
.
Após, precisamos incrementar o j++
e perguntamos se desejamos imprimir outro, passando System.out.println("Deseja imprimir outro?")
. Para lermos essa resposta, usaremos a classe scanner
. Então, fora do while
, na linha acima, escrevemos Scanner leitura = new Scanner(System.in)
.
Vamos ler esse resultado em uma variável booleana. Então, dentro de while()
, no fim do código, escrevemos imprimeOutro = leitura.nextBoolean()
. O while()
não sabe quantas vezes diremos que queremos imprimir outro.
System.out.println("\n Testando com while");
int j = 0;
boolean imprimeOutro = true;
Scanner leitura = new Scanner(System.in);
while (imprimeOutro) {
System.out.printf("%s - comissão %.2f\n", vendedores[j], calcularComissao(vendas[j]));
j++;
System.out.println("Deseja imprimir outro?");
imprimeOutro = leitura.nextBoolean()
}
Feito isso, executamos o código e temos o retorno abaixo.
Testando com while
Carlos - comissão 120,00
Deseja imprimir outro?
Respondemos com:
true
E temos o retorno abaixo:
Mariana - comissão 400,00
Deseja imprimir outro?
Escrevemos, então:
false
Assim, encerramos o laço. Essa é uma característica do while
, encerramos o laço, mas sem saber quantas vezes a condição será verdadeira. Diferente da condição de for()
em que garantimos que era para imprimir em todos os funcionários da lista.
do{} while()
No do while
, garantimos que pelo menos uma vez o nome do funcionário seja impresso. Então, para fazermos esse teste, recortamos a linha while (imprimeOutro)
e movemos para o fim do código, após o fechamento das chaves. No lugar, passamos o do {}
, poid queremos que o primeiro funcionário seja impresso antes de verificar a condição.
do {
System.out.printf("%s - comissão %.2f\n", vendedores[j],
calcularComissao(vendas[j]));
j++;
System.out.println("Deseja imprimir outro?");
imprimeOutro = leitura.nextBoolean();
} while (imprimeOutro);
Feito isso, executamos o código e temos o seguinte retorno:
Testando com while
Carlos - comissão 120,00
Deseja imprimir outro?
Respondemos com:
false
Assim, o laço é interrompido. Mas, pelo menos o primeiro foi feito.
break
e o continue
Além disso, podemos interromper ou continuar o laço com break
e continue
. Por exemplo, se não quisermos imprimir a comissão de Mariana, usamos if (vendedores[i].equalsIgnoreCase("mariana")) {}
. Queremos imprimir o Carlos e sair do laço. Para isso, nas chaves, passamos break
.
//Código omitido
for (int i = 0; i < vendedores.length; i++) {
if (vendedores[i].equalsIgnoreCase("mariana")) {
break;
}
}
//Código omitido
Carlos - comissão 120,00
Testando com while
Carlos - comissão 120,00
Deseja imprimir outro?
Ao executar, notamos que imprime a comissão do Carlos e sai do laço, então, deu certo. Respondemos conforme abaixo:
false
O break
interrompe o laço, independente da posição. Agora, vamos testar o contrário, queremos imprimir todos menos Mariana. Sendo assim, substituímos o break
por continue
.
//Código omitido
for (int i = 0; i < vendedores.length; i++) {
if (vendedores[i].equalsIgnoreCase("mariana")) {
continue;
}
}
//Código omitido
Ao executar, temos o retorno abaixo.
Carlos - comissão 120,00
João - comissão 840,00
Fernanda - comissão 150,00
Testando com while
Carlos - comissão 120,00
Deseja imprimir outro?
for each
Além dessas estruturas de laço, também temos o for each
. Suponhamos que queremos imprimir o nome de todas as pessoas. Para isso, utilizamos System.out.println("Todos os nomes")
e, em seguida, aplicamos o for each
. Esse laço é uma versão aprimorada do for
, ao entender automaticamente que estamos iterando sobre uma coleção, dispensando a necessidade de definir um ponto inicial e final manualmente.
Para testar, passamos for (String nomeVendedor: vendedores) {}
. Nas chaves, passamos o System.out.println("Nome: " + nomeVendedor)
.
//Código omitido
for (String nomeVendedor : vendedores) {
System.out.println("Nome: " + nomeVendedor);
}
Ao executar, temos o seguinte retorno:
Todos os nomes
Nome: Carlos
Nome: Mariana
Nome: João
Nome: Fernanda
Esse laço de repetição é adequado quando queremos imprimir ou fazer ações sem precisar do índice.
Pratique bastante e, se tiver dúvidas, entre em contato conosco pelo fórum ou Discord. Compartilhe seus projetos e deixe sua opinião sobre o curso. Até o próximo curso!
O curso Praticando Java: laços for e while possui 20 minutos de vídeos, em um total de 15 atividades. Gostou? Conheça nossos outros cursos de Java em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.