Programação Java: Desafio do diamante

Linguagem Java , Programação Java, Java Curso gratis. Nesse artigo iremos resolver o Desafio do Diamante em Java, que foi proposto na página de Exercícios envolvendo laços .

.js”>

Desafio diamante de asteriscos:
Escreva um aplicativo Java que peça um número inteiro ímpar ao usuário e desenhe um diamante no seguinte formato:

    *<br />   ***<br />   *<br />  ***<br />  *<br />  ***<br />   *<br />   ***<br />    *<br /><br />

Nesse caso, o número é 9, pois há 9 colunas e 9 asteriscos na linha central.

SOLUÇÃO
Há duas coisas na figura: espaços em branco e asteriscos.
Vamos resolver esse desafio analisando o padrão do número de asteriscos (variável asteriscos) e do número de espaços em branco (variável espacos).

Antes de desenhar o diamante, temos que checar se o número que o usuário forneceu é ímpar, através de um teste condicional:
if(numero%2 != 0)

Se não for, o programa cai no else e nossa aplicação Java é finalizada.
Vamos desenhar o dito cujo.

Parte de cima do diamante
Qual o número inicial de espaços?
Note que é sempre: (numero-1)/2
…e essa é a lógica do problema, a parte mais difícil, que é notar esse padrão.

E o número de asteriscos inicial?
Fácil, é 1 e vai crescendo de 2 em 2 até que o número de asteriscos impressos seja igual a numero.

Pois bem, vamos desenhar linha por linha, imprimindo primeiro o número correto de espaços e depois o de asteriscos.
Esse controle de linhas é feito pela linha de código:
for(int linha=1 ; espacos > 0 ; linha++)

Ou seja, vamos imprimir da linha 1 até a linha central (note que a linha central é a que tem espacos=0).

Agora, dentro desse looping vamos imprimir, em cada linha, primeiro o número de espaços e depois os asteriscos.
Sabemos que o número inicial de espaços é (numero-1)/2 e o número inicial de asteriscos é 1.

Para imprimir o número correto de espaços e asteriscos vamos usar a variável count:
for(int count=1 ; count
for(int count=1 ; count

Após o looping maior, o das linhas, temos que decrementar o número de espaços em 1, e incrementar o número de asteriscos em 2, além da quebra de linha.

Parte de cima do diamante
A lógica é a mesma da de cima, porém o número de espaços aumenta em 2, e o número de asteriscos é decrementado em 2.
Outra diferença é que vamos imprimir uma linha a menos, pois a linha central já foi impressa. Assim, essas linhas são impressas desde a primeira abaixo da linha central, até enquanto houver asteriscos (até ter 1, que é o último):
for(int linha=1 ; asteriscos > 0 ; linha++)

Logo, nosso código Java fica assim:

import java.util.Scanner;

public class DesafioDoDiamante {
public static void main(String[] args) {
int numero,
espacos,
asteriscos;
Scanner entrada = new Scanner(System.in);

System.out.print("Insira um número ímpar: ");
numero = entrada.nextInt();

if(numero%2 != 0){

//Imprimindo a parte de cima do diamante
asteriscos = 1;
espacos = (numero-1)/2;
for(int linha = 1 ; espacos > 0 ; linha++){

//Espaços
for(int count = 1 ; count System.out.print(" ");
}

//Asteriscos
for(int count = 1 ; count System.out.print("*");
}

espacos--;
asteriscos += 2;
System.out.println();
}

//Imprimindo a parte de baixo do diamante
for(int linha=1 ; asteriscos > 0 ; linha++){

//Espaços
for(int count = 1 ; count System.out.print(" ");
}

//Asteriscos
for(int count = 1 ; count System.out.print("*");
}

espacos++;
asteriscos -= 2;
System.out.println();
}

}else{
System.out.println("Não é ímpar!");
}


}
}

Lembrando que essa é apenas uma solução, é possível fazer usando menos linhas, porém o entendimento é mais complicado. Tente!