For-Loop Frage

Basics_Java

Mitglied
Hey Leute,
ich versuche ein Brief zu erstellen.
Der Bindestrich sollte auf der Höhe des "+" sein, bekomme dies irgendwie nicht hin.

Code:
public class UmschlagDrucken {
    
    // Breite und Abstand
    public static int breite = 80;
    public static int hoehe = 10;
    public static int abstand = 40;


    public static void main(String[] args) {
        
        
        for(int i =0; i < 1; i++) {
            System.out.println("+");
            
            for(int b = 0; b<=breite;b--) {
                System.out.println("-");
            }
        }
            for(int a=1; a<hoehe; a++) {
                System.out.println("|");
            }
                for(int c = 11; c < 12; c++) {
                    System.out.println("+");
                }
                
            }
        }
 
Wenn Du nach dem "+" keinen Zeilenumbruch haben willst, dann solltest Du print statt println verwenden.
println = print line -> fügt am Ende noch einen Zeilenumbruch hinzu.
 
Java:
public static void main(String[] args) {
        
        
        for(int i =0; i < 1; i++) {
            System.out.print("+");
            
            for(int b = 2; b<=breite;b++) {
                System.out.print("-");
            }
            for(int d =1; d<=1;d++) {
                System.out.println("+");
            
                for(int e=1; e<hoehe; e++) {
                    System.out.print("|");
                }
            }
        }
            for(int a=1; a<hoehe; a++) {
                System.out.println("|");
            }
                for(int c = 11; c < 12; c++) {
                    System.out.print("+");
                    for(int f = 0; f<breite;f++) {
                        System.out.print("-");
                    }
                        for(int g=1;g<=1;g++) {
                            System.out.print("+");
                        }
                    }
                }
                
            }

So weit bin ich jetzt gekommen. Die hintere Lücke kann ich nicht mit dem Symbol "|" füllen, dass es vom oberen + zum unteren + geht :/
 
Dann habe ich dich richtig verstanden. In einer Zeile musst du Leerzeichen zwischen den Bindestrichen printen, ganz genauso wie du die Bindestriche an der oberen und unteren Kante machst
 
Wenn Du Dein Rechteck aus #8 nimmst, dann hast Du zwei Arten von Zeilen: solche, die das Rechteck nach oben und unten begrenzen und "innere" Zeilen.

Ganz grob wäre der Algorithmus also:
Code:
zeichne Begrenzung
wiederhole (h-2)-mal {
    zeichne innere Zeile
}
zeichne Begrenzung

Das Zeichnen einer(!) inneren Zeile der Breite b ist dann etwas wie
Code:
zeichne "|" (ohne Zeilenumbruch)
wiederhole (b-2)-mal {
    zeichne " " (ohne Zeilenumbruch)
}
zeichne "|" (mit Zeilenumbruch)
 
Wenn Du Dein Rechteck aus #8 nimmst, dann hast Du zwei Arten von Zeilen: solche, die das Rechteck nach oben und unten begrenzen und "innere" Zeilen.

Ganz grob wäre der Algorithmus also:
Code:
zeichne Begrenzung
wiederhole (h-2)-mal {
    zeichne innere Zeile
}
zeichne Begrenzung

Das Zeichnen einer(!) inneren Zeile der Breite b ist dann etwas wie
Code:
zeichne "|" (ohne Zeilenumbruch)
wiederhole (b-2)-mal {
    zeichne " " (ohne Zeilenumbruch)
}
zeichne "|" (mit Zeilenumbruch)
Ich habe es versucht ... leider kein Erfolg entweder habe ich ein Zeilenumbruch zu viel oder ich weiß nicht wie ich die for schleife dafür "|" ansetze..
 
Du hast doch immer das gleiche Muster.

1. Obere Begrenzungslinie
Zeichne das +
Zeichne in einer Schleife das -
Zeichne das +
Zeilenumbruch

2. Body
Tue Wiederholt folgendes
Zeichne das |
Zeichne in einer Schleife Leerzeichen
Zeichne das |
Zeilenumbruch

3. Untere Begrenzungslinie
siehe Obere Begrenzungslinie

Mach eins nach dem anderen
 
Es empfiehlt sich das in weitere Methoden aufzuteilen:
Java:
	String ntimes(int n, char c) {
		return java.nio.CharBuffer.allocate(n).toString().replace('\0', c);
	}

	void printBrief(int w, int h) {
		String spaces = ntimes(w - 2, ' ');
		String line = ntimes(w - 2, '-');
		for (int y = 0; y < h; y++) {
			if (y == 0 || y == h - 1) {
				System.out.print('+');
				System.out.print(line);
				System.out.println('+');
			} else {
				System.out.print('|');
				System.out.print(spaces);
				System.out.println('|');
			}
		}
	}
 
Du hast doch immer das gleiche Muster.

1. Obere Begrenzungslinie
Zeichne das +
Zeichne in einer Schleife das -
Zeichne das +
Zeilenumbruch

2. Body
Tue Wiederholt folgendes
Zeichne das |
Zeichne in einer Schleife Leerzeichen
Zeichne das |
Zeilenumbruch

3. Untere Begrenzungslinie
siehe Obere Begrenzungslinie

Mach eins nach dem anderen
Java:
public static void main(String[] args) {
        for(int a=0;a<1;a++) {
            System.out.print("+");
        }
            for(int b=0;b<breite;b++) {
                System.out.print("-");
            }
                for(int c=0;c<1;c++) {
                    System.out.print("+");
                }
            
    System.out.println();
        for(int d=0;d<hoehe;d++) {
            System.out.println("|");
        }
            for(int e=0;e<1;e++) {
                System.out.println("");
            }
                for(int f=0;f<1;f++) {
                    System.out.println("|");
                    
            }
                System.out.println();
                
        }
        
    
    }

Das mit dem Body kriege ich nicht hin..
 
Wozu machst du eine Schleife, wenn du ein einzelnes Zeichen brauchst?

Ein einzelnes + bekommst du durch einen einzelnen Aufruf.

Und wenn du hoehe mal eine Zeile willst, dann muss die ganze Zeile in den Body der Schleife.

Und wenn du breite mal das - hattest, dann willst du auch genau so oft das Leerzeichen.
 
Java:
public static void main(String[] args) {
        for(int a=0;a<1;a++) {
            System.out.print("+");
        }
            for(int b=0;b<breite;b++) {
                System.out.print("-");
            }
                for(int c=0;c<1;c++) {
                    System.out.print("+");
                }
           
    System.out.println();
        for(int d=0;d<hoehe;d++) {
            System.out.println("|");
        }
            for(int e=0;e<1;e++) {
                System.out.println("");
            }
                for(int f=0;f<1;f++) {
                    System.out.println("|");
                   
            }
                System.out.println();
               
        }
       
   
    }

Das mit dem Body kriege ich nicht hin..
Ein Leerzeichen, so wie Leertaste. NICHT ein leerer String. Schleifen mit einer Iteration kannst du übrigens getrost weglassen und nur den Aufruf direkt verwenden
 
Ein Leerzeichen, so wie Leertaste. NICHT ein leerer String. Schleifen mit einer Iteration kannst du übrigens getrost weglassen und nur den Aufruf direkt verwenden
Java:
//Obere Begrenzung
            System.out.print("+");
        
            for(int b=0;b<breite;b++) {
                System.out.print("-");
            }
            System.out.print("+");
            System.out.println();
            
            //Body
            System.out.print("|");
            for(int c=0;c<breite;c++) {
                System.out.print(" ");
            }
            System.out.println("|");
            //System.out.println();
            System.out.print("|");
            for(int d=0;d<breite;d++) {
                System.out.print(" ");
            }
            System.out.println("|");
            System.out.print("|");
            for(int e=0;e<breite;e++) {
                System.out.print(" ");
            }
            System.out.println("|");
            //System.out.println();
            System.out.print("|");
            for(int f=0;f<breite;f++) {
                System.out.print(" ");
                
            }
            System.out.println("|");
            System.out.println("|");
            //System.out.println();
            System.out.print("|");
            for(int j=0;j<breite;j++) {
                System.out.print(" ");
                
            }
            System.out.println("|");
            System.out.println("|");
            System.out.println("|");
            //System.out.println();
            System.out.print("|");
            for(int k=0;k<breite;k++) {
                System.out.print(" ");
                
            }
            System.out.println("|");

Also ich bezweifle, dass dies zum richtigen führt 😀
 
Das ist doch schon fast gut.

Du hast jetzt saubere Blöcke.

Wenn du n mal einen Block hast wie:
Code:
System.out.print("|");
for(int c=0;c<breite;c++) {
  System.out.print(" ");
}
System.out.println("|");
System.out.println();

Dann kannst Du den Block ein einziges Mal schreiben um dann eine Schleife drum herum zu machen, die das eben n mal durchläuft.

Desweiteren hast Du ja eine Kopf und Fußzeile. Die sind gleich. Dies könntest Du also in eine Methode Auslagen, damit sich der Code nicht wiederholt.

Dann hast Du generell eine Schleife, die ein Zeichen x mal ausgibt. Das könnte man auch in eine Methode packen - dann hast Du auch nicht ständig die Schleifen sondern du hast dann nur noch Aufrufe wie print(" ", breite) oder print("-", breite).

Die letzten Zwei Ideen kannst Du aber erst einmal ignorieren ... aber das mit der Schleife über die Zeile im Body wäre der nächste wichtige Schritt.
 

Zurück
Oben