2016-07-06 95 views
5

ho cercando di stampare qualcosa di simile:stampa ASCII diamante figura in Java

+--------+ 
| /\ | 
| /--\ | 
| /====\ | 
|<------>| 
| \====/ | 
| \--/ | 
| \/ | 
+--------+ 

Finora ho con successo stampata la prima parte della figura, ma avendo un momento difficile con la seconda parte.

Questo è come mi sto stampando la prima parte della figura:

for (int fill = 0; fill <= ((2 * row - 1)); fill++) { 

    if ((row % 2) == 0) { 
    System.out.print("="); 
    } else { 
    System.out.print("-"); 
    } 
    } 

La seconda parte che ho è

for (int fill = 0; fill <= (n - 2 * (row - 1)); fill++) { //This is where I need help 
    if ((row % 2) == 0) { 
    System.out.print("="); 
    } else { 
    System.out.print("-"); 
    } 
    } 

Il mio risultato è simile al seguente:

+--------+                                                      
| /\ |                                                      
| /--\ |                                                      
| /====\ |                                                      
|<------>|                                                      
| \=====/ |                                                      
| \---/ |                                                      
| \=/ |                                                      
+--------+ 

Per il codice completo, controllare: http://pastebin.com/YyCJ6Cq3

+0

riempimento <= ((n - 2 * (riga - 1)) - 1) – samgak

+4

Grazie mille per aver incluso un frammento di codice pertinente nella tua domanda e aver condiviso un esempio completo da eseguire. Benvenuto nella community! – dimo414

+0

+1 per il nuovo utente raro che fornisce tutto è una domanda valida anche se è compito a casa (vediamo il tuo sforzo), benvenuto thuzle :) – shole

risposta

0

Come puoi vedere, stai stampando troppe colonne all'interno del diamante. Quindi la correzione dovrebbe essere semplice: stampa una colonna in meno ogni volta, cosa che fai riducendo il numero di volte in cui il ciclo viene eseguito da uno. In generale è possibile aggiungere uno - 1 alla fine del condizionale come suggerito da @samgak, ma in realtà non funzionerà qui. Proviamo a capire perché si è in esecuzione in questo problema.

Il primo ciclo non dipende da n; utilizza solo l'indice di riga corrente per determinare quanti caratteri stampare.

Nel secondo ciclo è necessario includere anche n per iniziare in grande e diminuire il valore di fill, ma si sta abusando di esso. n e row hanno la stessa magnitudine (dal row è definito in termini di n) ma si moltiplica solo row per 2. Dovresti invece eseguire prima l'operazione n-row, quindi il ridimensiona il risultato con 2 per stampare 2x caratteri in ogni riga. Dovrai giocarci un po 'di più dal momento che lo 2*(n-row) non è del tutto corretto, ma spero sia sufficiente per aiutarti a capire il tuo problema.

+0

per (int fill = 0; fill <= 2 * (n-row) -5; fill ++) ha fatto il trucco! grazie – thuzle

+0

@thuzle pensa a * perché * '-5' ha funzionato.Considerare la ristrutturazione di '2 * (n-row-2) -1', che è equivalente, ma mostra più chiaramente che' n-row' è due più della gamma di cui hai bisogno, e quindi l'intervallo deve essere spostato verso il basso uno Di Più. – dimo414

0

Questo sembra un progetto scolastico, quindi darò solo suggerimenti. L'affermazione condizionale sembra avere troppi riempimenti.

fill <= (n - 2 * (row - 1)); 
+0

@ dimo414 Questa risposta non mostra la soluzione, ma i punti con il frammento di codice causano problemi (con suggerimento su quale problema è). Vedendo che questa domanda sembra un compito a casa (non ho problemi perché ha tutte le parti necessarie per essere una buona domanda) Direi che è sufficiente per una risposta (perfetto per un commento, ma ancora sufficiente per una risposta). – Pshemo

0

Prova: riempire < = (n - (2 * (riga -1) +1); Oppure: riempire < (n - 2 * (riga -1));

+0

È necessario [modificare la risposta originale] (https://stackoverflow.com/posts/38214793/edit) anziché rispondere due volte. –