Criando um triângulo com loops for

Eu não pareço ser capaz de encontrar a resposta para isso

Eu preciso desenhar um triângulo simples usando loops for.

* *** ***** ******* ********* 

Eu posso fazer um meio triângulo, mas não sei como adicionar ao meu loop atual para formar um triângulo completo.

  * ** *** **** ***** for (int i=0; i<6; i++) { for (int j=0; j<i; j++) { System.out.print("*"); } System.out.println(""); } 

Obrigado-

    Primeiro de tudo, você precisa ter certeza de que está produzindo o número correto de símbolos * . Precisamos produzir 1, 3, 5 et cetera em vez de 1, 2, 3. Isso pode ser corrigido modificando as variables ​​do contador:

     for (int i=1; i<10; i += 2) { for (int j=0; j 

    Como você pode ver, isso faz com que i comece em 1 e aumente em 2 a cada passo, desde que seja menor que 10 (ou seja, 1 , 3 , 5 , 7 , 9 ). Isso nos dá o número correto de símbolos * . Em seguida, precisamos corrigir o nível de recuo por linha. Isso pode ser feito da seguinte forma:

     for (int i=1; i<10; i += 2) { for (int k=0; k < (4 - i / 2); k++) { System.out.print(" "); } for (int j=0; j 

    Antes de imprimir os símbolos * , imprimimos alguns espaços e o número de espaços varia dependendo da linha em que estamos. É para isso que serve o loop for com a variável k . Podemos ver que k itera sobre os valores 4 , 3 , 2 , 1 e 0 quando ì é 1 , 3 , 5 , 7 e 9 . É isso que queremos, porque quanto mais alto no triângulo somos, mais espaços precisamos colocar. Quanto mais avançamos no triângulo, menos espaços precisamos e a última linha do triângulo nem precisa de espaços.

    Uma solução divertida e simples:

     for (int i = 0; i < 5; i++) System.out.println(" *********".substring(i, 5 + 2*i)); 

    Eu aprecio o OP é novo para Java, então os methods podem ser considerados “avançados”, no entanto, eu acho que vale a pena usar este problema para mostrar como você pode atacar um problema, quebrando-o em pedaços.

    Vamos pensar em escrever um método para imprimir uma única linha, dizendo ao método qual é a linha numérica:

     public void printTriangleLine(int rowNumber) { // we have to work out what to put here } 

    Temos que imprimir um certo número de espaços, depois um certo número de estrelas.

    Olhando para o exemplo, posso ver que (se a primeira linha for 0), são os espaços (5-rowNumber) e (2 * rowNumber + 1).

    Vamos inventar um método que imprima as linhas de caracteres para nós e usá-lo:

     public void printTriangleLine(int rowNumber) { printSequence(" ", 5 - rowNumber); printSequence("*", 2 * rowNumber + 1); System.out.println(); } 

    Isso não será compilado até que realmente escrevamos printSequence (), então vamos fazer isso:

     public void printSequence(String s, int repeats) { for(int i=0; i 

    Agora você pode testar o printSequence por conta própria, e você pode testar o printTriangleLine sozinho. Por enquanto você pode apenas tentar chamando esses methods diretamente em main()

     public static void main(String [] args) { printSequence("a",3); System.out.println(); printTriangleLine(2); } 

    ... execute-o e verifique (com seus olhos) que ele produz:

     aaa ***** 

    Quando você se aprofunda na programação, você vai querer usar um framework de testes unitários como o jUnit. Em vez de imprimir, é mais provável que você escreva coisas como printTriangleLine para retornar uma String (que você imprimiria de mais acima em seu programa) e automatizaria seu teste com comandos como:

     assertEquals(" *****", TriangleDrawer.triangleLine(2)); assertEquals(" *", TriangleDrawer.triangleLine(0)) 

    Agora temos as peças que precisamos para desenhar um triângulo.

     public void drawTriangle() { for(int i=0; i<5; i++) { printTriangleLine(i); } } 

    O código que escrevemos é um pouco mais longo do que as respostas dadas por outras pessoas. Mas pudemos testar cada etapa e temos methods que podemos usar novamente em outros problemas. Na vida real, temos que encontrar o equilíbrio certo entre dividir um problema em muitos methods, ou muito poucos. Eu costumo preferir muitos methods realmente curtos.

    Para crédito extra:

    • adapte isto de forma que em vez de imprimir a System.out, os methods devolvam uma Cadeia - assim em seu principal () você pode usar System.out.print(drawTriangle())
    • adapte isto para que você possa pedir drawTriangle () para tamanhos diferentes - isto é, você pode chamar drawTriangle(3) ou drawTriangle(5)
    • faça com que funcione para triângulos maiores. Dica: você precisará adicionar um novo parâmetro "width" ao printTriangleLine ().

    Primeiro pense em uma solução sem código. A ideia é imprimir um número ímpar de *, aumentando por linha. Em seguida, centralize o * usando espaços. Sabendo o número máximo de * na última linha, você terá o número inicial de espaços para centralizar o primeiro *. Agora escreva no código.

    Pergunta de lição de casa? Bem, você pode modificar o seu código ‘triângulo direito’ original para gerar um ‘triângulo retângulo’ invertido com espaços. Assim será como

     for(i=0; i<6; i++) { for(j=6; j>=(6-i); j--) { print(" "); } for(x=0; x< =((2*i)+1); x++) { print("*"); } print("\n"); } 

    Tente este em Java

     for (int i = 6, k = 0; i > 0 && k < 6; i--, k++) { for (int j = 0; j < i; j++) { System.out.print(" "); } for (int j = 0; j < k; j++) { System.out.print("*"); } for (int j = 1; j < k; j++) { System.out.print("*"); } System.out.println(); } 
      for (int i=0; i<6; i++) { for (int k=0; k<6-i; k++) { System.out.print(" "); } for (int j=0; j 
     private static void printStar(int x) { int i, j; for (int y = 0; y < x; y++) { // number of row of '*' for (i = y; i < x - 1; i++) // number of space each row System.out.print(' '); for (j = 0; j < y * 2 + 1; j++) // number of '*' each row System.out.print('*'); System.out.println(); } } 

    Isso irá responder a sua pergunta. descomente o código comentado para exibir apenas a linha externa 🙂

     public class TrianglePattern { public static void main(String[] args) { // This logic will generate the triangle for given dimension int dim = 10; for (int i = 0; i < dim; i++) { for (int k = i; k < dim; k++) { System.out.print(" "); } for (int j = 0; j <= i; j++) { //if (i != dim - 1) // if (j == 0 || j == i) // System.out.print("*"); // else // System.out.print(" "); //else System.out.print("*"); System.out.print(" "); } System.out.println(""); } } } 

    Isso permite que você tenha um pouco mais de controle e facilite o processo:

     public static int biggestoddnum = 31; public static void main(String[] args) { for (int i=1; i 

    Apenas mude o valor do public static int biggestoddnum para qualquer número ímpar que você queira que ele seja, e o for(int k...) foi testado para funcionar.

    Bem, haverá duas seqüências size-n para espaços e (2*(n+1)) -1 para estrelas. Aqui está.

     public static void main(String[] args) { String template = "***************************"; int size = (template.length()/2); for(int n=0;n