Como imprimir uma diagonal do triangulo com asteriscos em JAVA?

O pretendido é:

*
 *
  *
   *
    *

Mas o meu programa completa tudo. Fiz assim:

for(int linhas = 1; linhas <= 5; linhas++) {
for(int ast = 1; ast <= linhas; ast++) {
System.out.print("* ");
}
System.out.println();
}

Boas amigo, tente assim,

public static void main(String[] args) {

    for (int i = 1; i <= 5; i++) {
        for (int j = 1; j <= i; j++) {
            if (j != i) {
                System.out.print(" ");
            } else if (j == i) {
                System.out.print("*");
            }
        }
        System.out.println();
    }
}

Bom estudo

1 curtida

O problema é que você imprime o asterisco dentro do for, por isso ele é impresso várias vezes.

Mas cada linha só tem um asterisco, e o que varia é a quantidade de espaços antes dele: na primeira linha não tem nenhum espaço, na segunda linha tem um espaço e assim por diante.

Ou seja, a solução é: para cada linha você faz um loop para imprimir os espaços, e depois você imprime um asterisco. Assim:

int linhas = 5;
for (int i = 0; i < linhas; i++) { // para cada linha 
    // imprime os espaços 
    for (int j = 0; j < i; j++) {
        System.out.print(" ");
    }
    // depois dos espaços, imprime um asterisco e pula a linha
    System.out.println("*");
}

A primeira linha é zero, então o for interno irá imprimir zero espaços (que é outra forma de dizer que, quando i é igual a zero, ele nem entra neste for). Na segunda linha, i é igual a 1, então o for interno imprime um espaço e assim por diante. Depois de imprimir os espaços, basta imprimir o asterisco e pular para próxima linha.

Repare que para imprimir o asterisco usei println, assim ele já pula para a próxima linha de uma vez (afinal, eu sei que o asterisco sempre está no fim da linha, então não precisa de um println vazio depois).

1 curtida

obrigado

1 curtida