Usando o laço while:
Xuxa, a rainha dos baixinhos, criou uma música que tem o segunte formato:
n patinhos foram passear
Além das montanhas
Para brincar
A mamãe gritou: Quá, quá, quá, quáMas só n-1 patinhos voltaram de lá.
Que se repete até nenhum patinho voltar de lá.
Ao final, todos os patinhos voltam:
A mamãe patinha foi procurar
Além das montanhas
Na beira do mar
A mamãe gritou: Quá, quá, quá, quá
E os n patinhos voltaram de lá.
Crie um programa em Java que recebe um inteiro positivo do usuário e exibe a música inteira na tela, onde o inteiro recebido representa o número inicial n de patinhos que foram passear.
.
.
.
package fundamentos;
import java.util.Scanner;
public class WhileFixacao {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.println("qual numero de patinhos?");
int nPatos = entrada.nextInt();
int nPatos2 = nPatos;
while (nPatos != 1) {
System.out.printf(" %d patinhos foram passear"
+ "Além das montanhas"
+ "Para brincar"
+ "A mamãe gritou: Quá, quá, quá, "
+ "quáMas só %d patinhos voltaram de lá. \n",nPatos,nPatos-1);
nPatos--;}
if (nPatos == 1) {
System.out.printf(" %d patinhos foi passear, ma nenhum patinho voltou de la\n",nPatos);}
System.out.printf("A mamãe patinha foi procurar"
+ "Além das montanhas"
+ "Na beira do mar"
+ "A mamãe gritou: Quá, quá, quá, quá"
+ "E os %d patinhos voltaram de lá.",nPatos2);
entrada.close();
}
}
Só mudaria o nome das variáveis para “patosInicial” (valor original digitado) e “patos” (valor atual).
A formatação tá um pouco estranha, pode ter sido na hora de colar aqui.
Uma das coisas que você tem que aprender ao programar é reconhecer padrões. No caso, identificar o que se repete e o que muda a cada iteração - que neste caso são algumas frases:
- alguém foi passear/procurar: muda conforme a quantidade
- Além das montanhas: nunca muda
- para brincar ou procurar: mudar na última iteração
- A mamãe gritou: nunca muda
- E alguns ou todos voltam: muda a cada iteração
Então basta fazer um loop de nPatos
até zero, e mudar as strings de acordo:
int nPatos = // ler quantidade do Scanner...
for (int n = nPatos; n >= 0; n--) {
String quemFoi, acao, volta;
if (n >= 1) {
quemFoi = String.format("%d patinho%s passear", n, n == 1 ? " foi" : "s foram");
acao = "Para brincar";
if (n == 1) {
volta = "Mas nenhum patinho voltou de lá";
} else {
volta = String.format("Mas só %d patinho%s de lá", n - 1, n == 2 ? " voltou" : "s voltaram");
}
} else {
quemFoi = "A mamãe patinho foi procurar";
acao = "Na beira do mar";
volta = String.format("E os %d patinhos voltaram de lá", nPatos);
}
System.out.printf("%s\nAlém das montanhas\n%s\nA mamãe gritou: qua qua qua qua\n%s\n\n", quemFoi, acao, volta);
}
Quando n
é maior que zero significa que ainda tem patinhos, e quando for zero é porque não tem mais nenhum e portanto é a vez da mamãe procurá-los.
Também coloquei \n
para pular a linha, assim fica mais parecido com o que o enunciado parece querer. A saída é:
5 patinhos foram passear
Além das montanhas
Para brincar
A mamãe gritou: qua qua qua qua
Mas só 4 patinhos voltaram de lá
4 patinhos foram passear
Além das montanhas
Para brincar
A mamãe gritou: qua qua qua qua
Mas só 3 patinhos voltaram de lá
3 patinhos foram passear
Além das montanhas
Para brincar
A mamãe gritou: qua qua qua qua
Mas só 2 patinhos voltaram de lá
2 patinhos foram passear
Além das montanhas
Para brincar
A mamãe gritou: qua qua qua qua
Mas só 1 patinho voltou de lá
1 patinho foi passear
Além das montanhas
Para brincar
A mamãe gritou: qua qua qua qua
Mas nenhum patinho voltou de lá
A mamãe patinho foi procurar
Além das montanhas
Na beira do mar
A mamãe gritou: qua qua qua qua
E os 5 patinhos voltaram de lá
1 curtida
Valeu, foi quando colei o texto. Mas vou organizar.
Hugo, obrigado. Vou fazer uma versão com essas estruturas de controle, nesse caso eu precisava usar o while, pra fins didáticos.
A princípio, um for
pode ser facilmente convertido para while
:
int nPatos = // ler quantidade do Scanner...
int n = nPatos;
while(n >= 0) {
String quemFoi, acao, volta;
if (n >= 1) {
quemFoi = String.format("%d patinho%s passear", n, n == 1 ? " foi" : "s foram");
acao = "Para brincar";
if (n == 1) {
volta = "Mas nenhum patinho voltou de lá";
} else {
volta = String.format("Mas só %d patinho%s de lá", n - 1, n == 2 ? " voltou" : "s voltaram");
}
} else {
quemFoi = "A mamãe patinho foi procurar";
acao = "Na beira do mar";
volta = String.format("E os %d patinhos voltaram de lá", nPatos);
}
System.out.printf("%s\nAlém das montanhas\n%s\nA mamãe gritou: qua qua qua qua\n%s\n\n", quemFoi, acao, volta);
n--;
}
Obrigado Hugo, vou refazer. Ajudou muito!!!