Este artigo tem como objetivo explicar o funcionamento do código Java fornecido, que desenha uma ampulheta de asteriscos (*) a partir de um número ímpar fornecido pelo usuário.
1. Importação da Classe Scanner
import java.util.Scanner;
O programa utiliza a classe Scanner
para receber a entrada do usuário. Essa classe permite a leitura de dados digitados no console.
2. Estrutura Principal do Programa
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
O programa inicia definindo a classe Main
e o método principal main
, onde a execução do programa começa. Um objeto da classe Scanner
é criado para capturar a entrada do usuário.
3. Entrada do Usuário
System.out.print("Digite um número ímpar: ");
int n = scanner.nextInt();
O programa solicita ao usuário que insira um número ímpar, armazenando esse valor na variável n
.
4. Validação do Número
if (n % 2 == 0) {
System.out.println("Por favor, insira um número ímpar.");
} else {
desenharAmpulheta(n);
}
Aqui, o programa verifica se o número inserido é ímpar. Se for par, uma mensagem de erro é exibida. Caso contrário, a função desenharAmpulheta(n)
é chamada.
5. Fechamento do Scanner
scanner.close();
Por questões de boas práticas, o scanner é fechado após o uso para liberar recursos.
6. Função para Desenhar a Ampulheta
A função desenharAmpulheta(int n)
é responsável por exibir o padrão da ampulheta no console.
6.1 Declaração e Laço para a Parte Superior da Ampulheta
int espacos = 0;
for (int i = n; i >= 0; i--) {
Inicialmente, a variável espacos
é definida como 0
. Em seguida, um laço for
decremente i
de n
até 0
, controlando as linhas da parte superior da ampulheta.
6.2 Impressão dos Espaços
for (int j = 0; j < espacos; j++) {
System.out.print(" ");
}
Esse laço for
imprime os espaços iniciais antes dos asteriscos, deslocando a impressão para a direita conforme o loop avança.
6.3 Impressão dos Asteriscos
for (int j = 0; j < 2 * i + 1; j++) {
System.out.print("*");
}
System.out.println();
espacos++;
Aqui, é gerada uma quantidade de asteriscos proporcional a 2 * i + 1
, formando a parte superior da ampulheta. A cada linha, espacos
é incrementado para ajustar o deslocamento.
6.4 Impressão da Parte Inferior
espacos = n;
for (int i = 0; i <= n; i++) {
Agora, a variável espacos
é redefinida para n
e outro laço for
é iniciado para gerar a parte inferior da ampulheta.
6.5 Impressão dos Espaços e Asteriscos
for (int j = 0; j < espacos; j++) {
System.out.print(" ");
}
for (int j = 0; j < 2 * i + 1; j++) {
System.out.print("*");
}
System.out.println();
espacos--;
Semelhante à parte superior, a cada iteração os espaços diminuem e a quantidade de asteriscos aumenta, criando o formato característico da ampulheta.
6.6 Código para Testa
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print(“Digite um número ímpar: “);
int n = scanner.nextInt();
if (n % 2 == 0) {
System.out.println(“Por favor, insira um número ímpar.”);
} else {
desenharAmpulheta(n);
}
scanner.close();
}
public static void desenharAmpulheta(int n) {
int espacos = 0;
for (int i = n; i >= 0; i–) {
for (int j = 0; j < espacos; j++) {
System.out.print(” “);
}
for (int j = 0; j < 2 * i + 1; j++) {
System.out.print(“*”);
}
System.out.println();
espacos++;
}
espacos = n;
for (int i = 0; i <= n; i++) {
for (int j = 0; j < espacos; j++) {
System.out.print(” “);
}
for (int j = 0; j < 2 * i + 1; j++) {
System.out.print(“*”);
}
System.out.println();
espacos–;
}
}
}
7. Exemplo de Saída
Se o usuário inserir 5
, a saída será:
***********
*********
*******
*****
***
*
***
*****
*******
*********
***********
Dessa forma, o programa gera uma ampulheta simétrica de asteriscos baseada no número inserido pelo usuário.
Conclusão
Este código demonstra conceitos essenciais de Java, incluindo entrada de dados, estrutura de controle e laços de repetição. A lógica utilizada para criar a ampulheta é um ótimo exercício para o entendimento de manipulação de saída no console.