2012-07-10 18 views
10

no me parece que sea capaz de encontrar la respuesta a esto-Creación de un triángulo con los bucles

tengo que dibujar un triángulo simple usando los bucles.

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

que puede hacer un triángulo media, pero no saben cómo añadir a mi bucle de corriente para formar un triángulo lleno.

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



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

de Acción de Gracias

+6

Aquí puede encontrar su solución- http://java4732.blogspot.in/2016/08/pyramid-programs-in-java.html – Umesh

Respuesta

14

En primer lugar, es necesario asegurarse de que' re produciendo el número correcto de símbolos *. Necesitamos producir 1, 3, 5, etcétera lugar de 1, 2, 3. Esto se puede solucionar mediante la modificación de las variables de control:

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

Como se puede ver, esto provoca i comenzar en 1 y aumento por 2 en cada paso, siempre que sea menor que 10 (es decir, 1, 3, 5, 7, 9). Esto nos da la cantidad correcta de símbolos *. Entonces necesitamos arreglar el nivel de sangría por línea. Esto se puede hacer de la siguiente manera:

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<i; j++) 
    { 
     System.out.print("*"); 
    } 
    System.out.println(""); 
} 

Antes de imprimir los símbolos * es la impresión de algunos espacios y el número de plazas varía dependiendo de la línea que estamos. Para eso es para el ciclo for con la variable k. Podemos ver que k itera sobre los valores 4, 3, 2, 1 y 0 cuando ì es 1, 3, 5, 7 y 9. Esto es lo que queremos porque cuanto más alto en el triángulo que somos, más espacios necesitamos colocar. Cuanto más avanzamos en el triángulo, menos espacios necesitamos y la última línea del triángulo ni siquiera necesita espacios.

2

pregunta tarea? bien se puede modificar el código original 'triángulo rectángulo' invertida para generar un 'triángulo rectángulo' con espacios Así que va a 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"); 
} 
+0

Es así, soy completamente nuevo en Java –

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

Una diversión, solución sencilla:

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

aprecio la OP es nuevo en Java, por lo métodos podrían ser considerados "avanzada", sin embargo, creo que vale la pena utilizar este problema a mostrar cómo se puede atacar a una problema al romperlo en pedazos.

Vamos a pensar acerca de cómo escribir un método para imprimir una sola línea, diciéndole al método que recta numérica es:

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

Tenemos que imprimir un número de espacios, a continuación, algunos número de estrellas.

Mirando el ejemplo, puedo ver que (si la primera fila es 0) es (5-rowNumber) espacios y (2 * rowNumber + 1) estrellas.

Vamos a inventar un método que imprime las filas de caracteres para nosotros, y lo utilizan:

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

Eso no va a compilar hasta que realmente escribimos printSequence(), por lo que vamos a hacer eso:

public void printSequence(String s, int repeats) { 
    for(int i=0; i<repeats; i++) { 
     System.out.print(s); 
    } 
} 

Ahora puede probar printSequence en sí mismo, y usted puede probar imprimirTriangleLine en sí mismo. Por ahora sólo se puede probar que fuera llamando a los métodos directamente en main()

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

... ejecutarlo y comprobar (con los ojos) que produzca:

aaa 
    ***** 

Al llegar más lejos en programación, querrá utilizar un marco de prueba de unidad como jUnit. En lugar de imprimir, és cosas de escritura más probables como printTriangleLine para devolver una cadena (que desea imprimir desde más arriba en su programa), y que le automatizar sus pruebas con comandos como:

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

Ahora tener las piezas que necesitamos para dibujar un triángulo.

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

El código que hemos escrito es un poco más largo que las respuestas que otras personas han dado. Pero hemos podido probar cada paso, y tenemos métodos que podemos usar nuevamente en otros problemas. En la vida real, tenemos que encontrar el equilibrio adecuado entre dividir un problema en demasiados métodos o muy pocos. Tiendo a preferir muchos métodos realmente cortos.

Para crédito adicional:

  • adaptar este modo que en lugar de imprimir en System.out, los métodos devuelven una cadena - por lo que en su main() se puede utilizar System.out.print(drawTriangle())
  • adaptar esta manera que puede solicitar drawTriangle() para diferentes tamaños, es decir, puede llamar al drawTriangle(3) o drawTriangle(5)
  • hacer que funcione para triángulos más grandes. Sugerencia: deberá agregar un nuevo parámetro de "ancho" para imprimirTriangleLine().
2

prueba este en 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(); 
} 
1

Esto responder a su pregunta. elimine el código comentado para mostrar sólo la línea 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(""); 
     } 
    } 
} 
1
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(); 
    } 
} 
3

En primer lugar pensar en una solución sin código. La idea es imprimir un número impar de *, aumentando por línea. Luego centre el * usando espacios. Si conoce el número máximo de * en la última línea, le dará el número inicial de espacios para centrar el primero *. Ahora escríbelo en código.

0

Esto le permite tener un poco más de control y un tiempo más fácil por lo que es:

public static int biggestoddnum = 31; 

public static void main(String[] args) { 
    for (int i=1; i<biggestoddnum; i += 2) 
    { 
     for (int k=0; k < ((biggestoddnum/2) - i/2); k++) 
     { 
      System.out.print(" "); 
     } 
     for (int j=0; j<i; j++) 
     { 
      System.out.print("*"); 
     } 
     System.out.println(""); 
    } 
} 

Sólo cambia el valor public static int biggestoddnum 's a cualquier número impar que quiere que sea, y la for(int k...) ha sido probado para trabajar .

Cuestiones relacionadas