2.6 Loopings e mais loopings
Considerando que todos os livros têm o preço 59.90, seria muito trabalhoso criar tantas variáveis para que o valor da soma ultrapasse 2000 reais. Para nos ajudar na construção desses livros podemos criar uma estrutura de repetição (um looping). Uma das formas de se fazer isso seria utilizando o while:
double soma = O; int contador = O;
while (contador < 35) {
double valorDoLivro = 59.9O; soma = soma + valorDoLivro; contador = contador + 1;
}
O while é bastante parecido com o if. A grande diferença é que, en-
quanto sua expressão booleana for true, seu código continuará sendo executado. Neste exemplo estamos criando uma variável soma para acumular o valor total dos livros e também uma variável contador para controlar a quantidade de vezes que queremos iterar.
Note que estamos adicionando 35 livros, já que a condição é contador
< 35 e quea cada iteração incrementamos1 ao valor do contador.
Nosso código completo fica da seguinte forma:
public class CalculadoraDeEstoque {public static void main(String[] args) { double soma = O;int contador = O;
while (contador < 35) {
double valorDoLivro = 59.9O; soma = soma + valorDoLivro; contador = contador + 1;
}
System.out.println("O total em estoque e "+ soma);if (soma < 150) {
System.out.println("Seu estoque esta muito baixo!");} else if (soma >= 2000) {
System.out.println("Seu estoque esta muito alto!");} else {
System.out.println("Seu estoque esta bom");}
}
}
Ao executá-lo a saída será:
O total em estoque e 2096.5000000000014 Seu estoque esta muito alto!
Looping infinito
É muito comum esquecermos de modificar o valor que está sendo comparado dentro do while ou nas diferentes formas que veremos para se fazer um looping. Isso vai resultar no que chamamos de looping infinito, uma vez que a condição de looping sempre será true. Se quiser testar, adicione um comentário na linha que incrementa o valor do contador e executeo código:
while (contador < 35) {
double valorDoLivro = 59.90; soma = soma + valorDoLivro;
// contador = contador + 1;
}
Podemos deixar nosso código ainda mais enxuto utilizando o operador de atribuição +=. Basta, no lugar de fazer:
soma = soma + valorDoLivro;
Mudarmos o código para:
soma += valorDoLivro;
Essa é uma forma equivalente de se incrementar o valor de uma variável.
O mesmo poderia ser feito com nosso contador, repare:
contador += 1;
Podemos utilizar essa técnica com os seguintes operadores:
Mas para esse caso há uma forma ainda mais enxuta, utilizando o operador unário ++:
contador ++;
O código do while agora fica da seguinte forma:
while (contador < 35) {
double valorDoLivro = 59.90; soma += valorDoLivro; contador ++;
}
Nosso código pode ficar ainda mais enxuto utilizando uma outra forma de looping extremamente conhecida e utilizada, o for.
Observe que a estrutura que utilizamos no while foi parecida com:
// inicializa�ao do contador while (condi�ao) {
// atualiza�ao do contador
}
Com o for, podemos fazer isso de uma forma ainda mais direta:
for(inicializa�ao; condi�ao; atualiza�ao) {
}
Isso mesmo, além da condição booleana ele também reserva um local para
inicialização de variáveis e atualização de seus valores. Com o for nosso código pode ser escrito assim:
double soma = O;
for(int contador : = O; contador < 35; contador ++) { soma += 59.9O;
}
Sem dúvida, é uma forma mais direta. Você muitas vezes verá essa variável
contador que criamos ser chamada de i (index, ou índice). Seguindo esse padrão, nosso código completo fica assim:
public class CalculadoraDeEstoque {public static void main(String[] args) { double soma = O;for(double i : = O; i < 35; i ++) { soma += 59.9O;
}
System.out.println("O total em estoque e "+ soma);if (soma < 150) {
System.out.println("Seu estoque esta muito baixo!");} else if (soma >= 2000) {
System.out.println("Seu estoque esta muito alto!");} else {
System.out.println("Seu estoque esta bom");}
}
}
Trabalhando com continue e break
Você pode utilizar a palavra-chave continue para pular uma iteração de seu looping e forçar a execução do próximo laço. O código a seguir vai imprimir todos os números de 0 a 10, mas vai pular o número 7:
for(int i : = O; i ⇐ 1O; i++) { if (i == 7) {
continue;
}
System.out.println(i);}
Outra possibilidade comum é parar a execução de um looping dada uma determinada condição. Para isso, utilizamos a palavra-chave break:
for(int i : = O; i ⇐ 1O; i++) { if (i == 7) {
break;
}
System.out.println(i);