2016-07-06 12 views
5

ich so etwas zu drucken versuchen:Drucke ASCII Diamant Abbildung in Java

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

Bisher habe ich erfolgreich gedruckt, um den ersten Teil der Figur, sondern eine harte Zeit mit dem zweiten Teil aufweisen.

Dies ist, wie ich den ersten Teil der Figur am Druck:

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

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

Der zweite Teil ich habe, ist

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

wie dies Mein Ergebnis aussieht:

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

Für den vollständigen Code überprüfen Sie bitte: http://pastebin.com/YyCJ6Cq3

+0

Füllung <= ((n - 2 * (row - 1)) - 1) – samgak

+4

Vielen Dank, dass Sie sowohl ein relevantes Code-Snippet in Ihre Frage aufgenommen haben als auch ein komplettes ausführbares Beispiel teilen.Willkommen in der Community! – dimo414

+0

+1 für seltene neue Benutzer, die alles bieten wir brauchen.Es ist eine gültige Frage, auch wenn es Hausaufgaben sind (wir sehen Ihre Mühe), Willkommen thuzle :) – shole

Antwort

0

Wie Sie sehen können, drucken Sie eine zu viele Spalten innerhalb des Diamanten. Die Korrektur sollte also einfach sein - drucken Sie jedes Mal eine Spalte weniger, was Sie tun, indem Sie die Anzahl der Wiederholungen der Schleife um eins reduzieren. Im Allgemeinen können Sie einfach eine - 1 an das Ende der Bedingung hinzufügen, wie es @samgak vorschlägt, aber das wird hier nicht funktionieren. Lassen Sie uns versuchen zu verstehen, warum Sie in dieses Problem laufen.

Ihre erste Schleife hängt nicht von n ab; Es verwendet nur den aktuellen Zeilenindex, um zu bestimmen, wie viele Zeichen gedruckt werden sollen.

In der zweiten Schleife müssen Sie auch korrekt n einschließen, um groß zu beginnen und den Wert von fill zu verringern, aber Sie missbrauchen es. n und row sind von der gleichen Größenordnung (seit row ist in Bezug auf n definiert), aber Sie multiplizieren nur row von 2. Stattdessen sollten Sie zuerst die n-row Operation, dann skalieren das Ergebnis von 2, um 2x Zeichen in jeder Zeile zu drucken. Sie müssen damit ein wenig weiter spielen, da 2*(n-row) nicht ganz richtig ist, aber hoffentlich ist das genug, um Ihnen zu helfen, Ihr Problem herauszufinden.

+0

für (int füllen = 0; füllen <= 2 * (n-Zeile) -5; füllen ++) hat den Trick! danke – thuzle

+0

@thuzle denke über * warum * '-5' hat den Trick gemacht.Überlegen Sie, ob Sie es in '2 * (n-row-2) -1' umstrukturieren, was äquivalent ist, aber deutlicher zeigt, dass' n-row' zwei mehr als der benötigte Bereich ist, und dann muss der Bereich um eins nach unten verschoben werden Mehr. – dimo414

0

Das sieht nach einem Schulprojekt aus, daher werde ich nur Hinweise geben. Die bedingte Anweisung sieht so aus, als hätte sie eine zu viele Füllung.

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

@ dimo414 Diese Antwort zeigt keine Lösung, aber zeigt auf Code-Fragment mit verursacht Problem (mit Hinweis, welches Problem ist). Sehen, dass diese Frage wie Hausaufgaben aussieht (ich habe kein Problem damit, da es alle notwendigen Teile hat, um eine gute Frage zu sein) Ich würde sagen, es reicht für eine Antwort (perfekt für einen Kommentar, aber immer noch genug für eine Antwort). – Pshemo

0

Versuchen: Füllen < = (n - (2 * (Reihe -1) + 1); Oder: < füllen (n - 2 * (Reihe -1));

+0

Sie sollten Ihre ursprüngliche Antwort bearbeiten (https://stackoverflow.com/posts/38214793/edit), anstatt zweimal zu antworten. –