Erste Schritte Rechteck mit Sternchen ausgeben (for-Schleife)

Aikuz

Mitglied
Hallo,

ich weißt nicht wie ich hier vorgehen soll :-(

Aufgabe:

Schreiben Sie ein Programm Rechteck, welches die Länge und Höhe des Rechtecks
über die Tastatur einliest. Anschließend soll das Rechteck mittels dem Zeichen * gezeichnet
werden. Die Ausgabe soll zum Beispiel für die Eingabe von 4 (Länge) und 3 (Höhe) wie folgt
aussehen:
Code:
****
*  *
****

Das Rechteck wird hier nicht richtig angezeit... es soll quasi einen Rahmen ergeben. (Das Sternchen in der Mitte müsste eigtl weiter rechts stehen.
 
Zuletzt bearbeitet von einem Moderator:

Khal Drogo

Bekanntes Mitglied
Guten Abend Aikuz.

Hast du denn schon mal angefangen? Was hast du bisher gemacht?
Wir werden hier keine Hausaufgaben für dich erledigen ;)

Mit freundlichen Grüßen
Xelsarion
 

Aikuz

Mitglied
Ja habe ich. Allerdings weiß ich nicht wie ich diese 2 Schleifen nun richtig verschachteln soll (ich nehme an das muss ich) und wie dann eben dieser Rahmen entsteht und nicht nur das was ich da gemacht habe.


Java:
public class rechteck {

    public static void main(String[] args) {
    
    int h = StdInput.readInt ("Höhe");
    int l = StdInput.readInt ("Länge");
    
    
    for(double i = l; i>0; i--){
        System.out.print("*");
    }

    for(double i = h; i>0; i--){
        System.out.println("*");
    }

    }
    
}
 
Zuletzt bearbeitet von einem Moderator:

Khal Drogo

Bekanntes Mitglied
Code bitte in
Code:
[code=Java]
Tags!

Wie man die obere und die untere "Linie" zeichnet, weißt du ja (da du zumindest die obere zeichnest).
Überleg dir für die mittleren Zeilen doch mal, in welchen Fällen du * und in welchen ein Leerzeichen ausgeben musst.

Mit freundlichen Grüßen
Xelsarion
 

Aikuz

Mitglied
Oh sorry.. hoffe das geht jetzt :D

Hab es jetzt geschafft ein Rechteck auszugeben, allerding nicht als "Rahmen".
Hmm.. naja ich will (außer bei der ersten und letzten Zeile) nur das erste Sternchen und das letzt Sternchen ausgeben.

Java:
public class rechteck {

	public static void main(String[] args) {

		int h = StdInput.readInt ("Höhe");
		int l = StdInput.readInt ("Länge");

		for(double j = h; j>0; j--){
			for(double i = l; i>0; i--){
				
	
				System.out.print("*");
		
			} System.out.println();
		}




}

}
 
Zuletzt bearbeitet:

Khal Drogo

Bekanntes Mitglied
Dann solltest du das ganze vielleicht mit einigen if-Statements bestücken oder das so aufteilen, dass du die erste Zeile ausgibst, dann alle weiteren bis zur vorletzten und anschließend die letzte.

Mit freundlichen Grüßen
Xelsarion
 

Aikuz

Mitglied
so :) jetzt gehts! Danke für die Unterstützung!

Java:
import util.StdInput;

public class rechteck {

	public static void main(String[] args) {

		int l = StdInput.readInt ("Länge"); 
		int b = StdInput.readInt ("Breite");  

		for(int i=0; i<l; i++){
			System.out.print("*");
		} System.out.println();
		
		
		
		for(int i=0; i<b-2; i++){
			for(int j=0; j<l; j++){
				
				if(j==0 || j==l-1){
					System.out.print("*");
				} else{
					System.out.print(" ");
				}
				
			} System.out.println();
		}
		
		for(int i=0; i<l; i++){
			System.out.print("*");
		}

}

}
 

Khal Drogo

Bekanntes Mitglied
Sehr schön, nichts zu danken, gelöst hast du es selbst :)

Wenn du einen Schritt weiter gehen willst, kannst du dir ja überlegen, wie du dir bspw. die zwei äußeren for-Schleifen sparen kannst.

Mit freundlichen Grüßen
Xelsarion
 
Zuletzt bearbeitet:

Khal Drogo

Bekanntes Mitglied
Naja, du musst den Fall, den diese abdecken natürlich irgendwie abfangen, das wiederum hört sich doch sehr nach weiteren if-Statements an ;)

Mit freundlichen Grüßen
Xelsarion
 

Aikuz

Mitglied
Jaa das hab ich mir schon gedacht. Aber ich weiß einfach nicht, wie ich das formulieren soll. Es wäre einfacher wenn die Werte vorgegeben wären, aber mit dieser Tastatureingabe.... :(

Kannst du mir noch einen weiteren Tipp geben :D Ich weiß "hier macht niemand für mich die "Hausaufgaben"", aber ich weiß wirklich nicht wie ich da anfangen soll :(
 

Khal Drogo

Bekanntes Mitglied
Du hast die Aufgabe ja längst gelöst, das hier sind ja nur noch Kleinigkeiten, die das ganze nichtmals zwangsläufig performanter machen :)

Überleg doch mal, bei welchen Werten für i bzw. j die ganze Zeile gefüllt werden muss.

Mit freundlichen Grüßen
Xelsarion
 

Aikuz

Mitglied
Soooo...

habe jetzt mein if geändert. Allerding kommen nun immer die ersten zwei Zeilen "voll ausgefüllt" raus. Der Rest passt dann wieder :D

Aber wieso?

Java:
if(i==0 || i==h ||j==0 || j==b-1){
 

Khal Drogo

Bekanntes Mitglied
Das weiß ich nicht, dafür bräuchte ich vermutlich den ganzen Code.
Vage Vermutung: Hast du eventuell vergessen, die erste for-Schleife zu entfernen? :D

Mit freundlichen Grüßen
Xelsarion
 

Aikuz

Mitglied
Oder auch nicht :(

jetzt fehlt natürlich die untere Linie :(

Aber meine letzte Linie ist doch die Höhe minus 1? z.B.: bei Eingabe b=4, h=5 --> ... i==h-1 ....

Java:
package Z_Probieren;

import util.StdInput;

public class Test {

	public static void main(String[] args) {

		int b = StdInput.readInt ("Breite"); 
		int h = StdInput.readInt ("Höhe");  


		for(int i=0; i<h-2; i++){
			for(int j=0; j<b; j++){
				
				if(i==0 || i==h-1 ||j==0 || j==b-1){
					System.out.print("*");
				} else{
					System.out.print(" ");
				}
				
			} System.out.println();
		}
		
		


}

}
 
Zuletzt bearbeitet:

Khal Drogo

Bekanntes Mitglied
Nichts schlimmes, du solltest nochmal alle Bedingungen deines if-Statements überprüfen und vorher aber noch die deiner for-Schleifen ;)

Mit freundlichen Grüßen
Xelsarion
 

Aikuz

Mitglied
:) nun geht es! :idea:

Java:
package Z_Probieren;

import util.StdInput;

public class Test {

	public static void main(String[] args) {

		int b = StdInput.readInt ("Breite"); 
		int h = StdInput.readInt ("Höhe");  


		for(int i=0; i<h; i++){
			for(int j=0; j<b; j++){
				
				if(i==0 || i==h-1 ||j==0 || j==b-1){
					System.out.print("*");
				} else{
					System.out.print(" ");
				}
				
			} System.out.println();
		}
		
		


}

}
 

Neue Themen


Oben