2012-07-10 12 views
10

Non mi sembra di essere in grado di trovare la risposta a questo-Creazione di un triangolo con i cicli for

ho bisogno di disegnare un semplice triangolo utilizzando per i loop.

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

Posso fare un mezzo triangolo, ma non so come aggiungere al mio ciclo corrente per formare un triangolo completo.

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



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

grazie-

+6

Qui puoi trovare la tua soluzione- http://java4732.blogspot.in/2016/08/pyramid-programs-in-java.html – Umesh

risposta

14

Prima di tutto, è necessario assicurarsi che si' producendo il numero corretto di simboli *. Dobbiamo produrre 1, 3, 5 eccetera invece di 1, 2, 3. Questo può essere risolto modificando le variabili contatore:

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

Come si può vedere, questo provoca i iniziare alle 1 e aumento per 2 a ogni passaggio finché è inferiore a 10 (ad esempio, 1, 3, 5, 7, 9). Questo ci dà il numero corretto di simboli *. Quindi dobbiamo correggere il livello di rientro per riga. Questo può essere fatto nel modo seguente:

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(""); 
} 

Prima di stampare le * simboli della stampa alcuni spazi e il numero di spazi varia a seconda della linea che siamo sulla. Ecco a cosa serve il ciclo for con la variabile k. Possiamo vedere che k itera sui valori 4, 3, 2, 1 e 0 quando ì è 1, 3, 5, 7 e 9. Questo è ciò che vogliamo perché più in alto nel triangolo siamo, più spazi abbiamo bisogno di posizionare. Più ci allontaniamo dal triangolo, abbiamo meno spazi di cui abbiamo bisogno e l'ultima linea del triangolo non ha nemmeno bisogno di spazi.

2

questione compiti a casa? Ebbene si può modificare il codice originale 'triangolo rettangolo' per generare una rovesciata 'triangolo' con spazi Così che sarà come

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

Sì, sono completamente nuovo a 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

Un divertimento, soluzione semplice:

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

Apprezzo il PO è nuovo a Java, quindi i metodi potrebbero essere considerati "avanzato", ma penso che valga la pena di utilizzare questo problema per mostrare come si può attaccare un problema rompendolo in pezzi.

Pensiamo di scrivere un metodo per stampare una singola linea, raccontando il metodo che la linea numero è:

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

dobbiamo stampare un numero di spazi, allora qualche numero di stelle.

Guardando all'esempio, posso vedere che (se la prima riga è 0) è (5-rowNumber) spazi e (2 * rowNumber + 1) stelle.

Inventiamo un metodo che consente di stampare le righe di caratteri per noi, e lo usano:

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

Che non compilare fino a quando abbiamo effettivamente scrivere printSequence(), quindi facciamolo:

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

Ora è possibile test printSequence per conto proprio, e è possibile test printTriangleLine a sé stante. Per ora si può solo provare chiamando quei metodi direttamente nel main()

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

... eseguirlo e verificare (con gli occhi) che emetta:

aaa 
    ***** 

quando si arriva ulteriormente in programmazione, ti consigliamo di utilizzare un framework di test unità come jUnit. Invece di stampa, faresti più probabile cose scrivere come printTriangleLine per restituire una stringa (che ci si stampa da più in alto nel programma), e si dovrebbe automatizzare il vostro test con comandi come:

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

Ora noi avere i pezzi di cui abbiamo bisogno per disegnare un triangolo.

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

Il codice che abbiamo scritto è un po 'più lungo delle risposte che altre persone hanno dato. Ma siamo stati in grado di testare ogni passaggio e abbiamo metodi che possiamo riutilizzare in altri problemi. Nella vita reale, dobbiamo trovare il giusto equilibrio tra la rottura di un problema in troppi metodi o troppi pochi. Tendo a preferire molti metodi molto brevi.

Per il credito supplementare:

  • adattare questo modo che invece di stampa a System.out, i metodi di restituire una stringa - così nel main() è possibile utilizzare System.out.print(drawTriangle())
  • adattare questo modo che puoi chiedere a drawTriangle() per diverse dimensioni - ovvero, puoi chiamare drawTriangle(3) o drawTriangle(5)
  • farlo funzionare per triangoli più grandi. Suggerimento: sarà necessario aggiungere un nuovo parametro "width" per stampareTriangleLine().
2

provare questo in 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

Questo risponderà alla tua domanda. rimuovere il commento il codice commentato per visualizzare solo linea esterna :)

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

Prima pensare ad una soluzione senza codice. L'idea è di stampare un numero dispari di *, aumentando di volta in volta. Quindi centra il * usando gli spazi. Conoscendo il numero massimo di * nell'ultima riga, otterrai il numero iniziale di spazi per centrare il primo *. Ora scrivilo in codice.

0

Questo ti permette di avere un po 'più di controllo e un tempo più facile che lo rende:

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(""); 
    } 
} 

Basta cambiare il valore s' public static int biggestoddnum a qualsiasi numero dispari che vuoi che sia, e la for(int k...) è stato testato per funzionare .

Problemi correlati