Skip to content

Instantly share code, notes, and snippets.

@gfreivasc
Last active February 24, 2020 13:41
Show Gist options
  • Save gfreivasc/c456bc916109acf0ca7898ddeda6b72f to your computer and use it in GitHub Desktop.
Save gfreivasc/c456bc916109acf0ca7898ddeda6b72f to your computer and use it in GitHub Desktop.
package com.gabrielfv.sandbox.triangle;
import java.util.Scanner;
public class Triangle {
/**
* Este programa deve "printar" na tela três tipos de triângulos
* cujo tamanho é definido pela entrada do usuário. Os tipos de
* triângulo são:
*
* Triângulo inclinado para a esquerda (left-leaning)
* *
* * *
* * * *
* * * * *
* * * * * *
*
* Triângulo inclinado para a direita (right-leaning)
* *
* * *
* * * *
* * * * *
* * * * * *
*
* Triângulo centralizado
* *
* * *
* * * *
* * * * *
* * * * * *
*
* Cada método de triângulo tem suas nuances, preste atenção
*/
public static void main(String[] args) {
System.out.print("Informe a altura dos triangulos: ");
int height = new Scanner(System.in).nextInt();
/*
TODO: O código abaixo é para desenhar os triângulos. É possível criar uma função para cada um.
*/
// Esse loop desenha o triangulo left-leaning linha a linha
for (int i = 0; i < height; ++i) {
String line = lineLeanLeft(i);
System.out.println(line);
}
System.out.println(); // Quebra de linha para espaço entre triângulos
// Esse loop desenha o triangulo right-leaning linha a linha
for (int i = 0; i < height; ++i) {
String line = lineLeanRight(i, height);
System.out.println(line);
}
System.out.println();
// Esse loop desenha o triangulo centralizado linha a linha
for (int i = 0; i < height; ++i) {
String line = lineCentered(i, height);
System.out.println(line);
}
}
/**
* A lógica aqui é definir quantas vezes devemos incluir o caractere '*' na linha,
* bem como incluir o espaço entre eles.
*
* @param line - a linha do triangulo, de cima para baixo, que deve ser desenhada
* @return a linha do triangulo pronta para ser "printada" na tela
*/
private static String lineLeanLeft(int line) {
String content = "";
// TODO: Explicar por que usa-se "<=" e não apenas "<"
for (int i = 0; i <= line; i++) {
content += "* ";
}
return content;
}
/**
* Além de definir o número de estrelas que devem ser desenhadas na linha,
* também precisamos calcular o espaço para que as linhas fiquem corretamente
* alinhadas à direita.
*
* TODO: Consegue explicar a lógica que permite alinhar corretamente? Explique
* a nível de detalhe da quantidade de espaços em branco utilizados. Por que precisamos
* saber a altura do triângulo agora?
*
* @param line - a linha do triangulo, de cima para baixo, que deve ser desenhada
* @param height - a altura do triangulo
* @return a linha do triangulo pronta para ser "printada" na tela
*/
private static String lineLeanRight(int line, int height) {
String content = "";
// cumprimento da parte vazia
// TODO: Explicar por que o cálculo correto é altura - linha - 1, e não apenas altura - linha
int blankLength = height - line - 1;
for (int i = 0; i < blankLength; i++) {
content += " ";
}
for (int i = 0; i <= line; i++) {
content += "* ";
}
return content;
}
/**
* @param line - a linha do triangulo, de cima para baixo, que deve ser desenhada
* @param height - a altura do triangulo
* @return a linha do triangulo pronta para ser "printada" na tela
*/
private static String lineCentered(int line, int height) {
String content = "";
// TODO: Implementar triangulo centralizado
/**
* ex.:
* altura = 5
* *
* * *
* * * *
* * * * *
* * * * * *
*/
return content;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment