Rechteck zeichnen

SmittyJoe

Mitglied
Servus,

habe zur Übung die Aufgabe aus einem Javabuch genommen, komme aber bei einem kleinem Punkt nicht weiter.
Aufgabe ist einfach die do-while und while-Schleifen einer Implementierung in for-Schleifen umzuändern. Bei der
Umänderung fehlt mir die rechte Seite des Rechtecks, die anderen drei Kanten bekomme ich genauso raus wie
bei der ersten Implementierung.

Implementierung(while/do-while-Version):

Java:
public class RechteckZeichnen {
	static final int HOEHE = 10;
	static final int BREITE = 20;

	public static void main(String[] args) {
		int hoehe; // Zaehlvariable für die Hoehe
		int breite; // Zaehlvariable für die Breite
		breite = 0;
		do {
			System.out.print("*");
			breite++;
		} while (breite < BREITE);
		System.out.println();

		hoehe = 0;

		while (hoehe < HOEHE - 2) {
			System.out.print("*");
			breite = 1;
			do {
				System.out.print(" ");
				breite++;
			} while (breite < BREITE - 1);
			System.out.println("*");
			hoehe++;
		}

		breite = 0;
		while (breite < BREITE) {
			System.out.print("*");
			breite++;
		}
		System.out.println();
	}
}

Mit for-Schleifen:

Java:
public class ForRechteckZeichnen {
	static final int HOEHE = 10;
	static final int BREITE = 20;

	public static void main(String[] args) {
		int hoehe; // Zaehlvariable für die Hoehe
		int breite; // Zaehlvariable für die Breite

		for (breite = 0; breite < BREITE; breite++) {
			System.out.print("*");
		}
		System.out.println();

		for (hoehe = 0; hoehe < HOEHE - 2; hoehe++) {
			for (breite = 1; breite < BREITE - 1; breite++) {
				System.out.print("");
			}

			System.out.println("*");
		}

		for (breite = 0; breite < BREITE; breite++) {

			System.out.print("*");
		}
		System.out.println();

	}
}

Bei der Erzeugung der Breite stimmt alles, doch wo platziere ich in dem Programmabschnitt die print-Anweisung mit dem Sternchen so, dass auf auf der rechten Seite die Kante erzeugt bekomme?

Java:
for (hoehe = 0; hoehe < HOEHE - 2; hoehe++) {
			for (breite = 1; breite < BREITE - 1; breite++) {
				System.out.print("");
			}

			System.out.println("*");
		}


Ausgabe:
Java:
********************
*
*
*
*
*
*
*
*
********************
 
Zuletzt bearbeitet:
Ich stehe grade codetechnisch auf einem Schlauch und verstehe deshalb deinen Code nicht, was aber an mir liegt 😉

Der Ablauf ist in Pseudocode so:

Java:
//obere Seite
for (von 0 bis BREITE){
  sysout("*");
}

for (von 1 bis HÖHE - 1){
  sysout("*");//linke Seite
  
  for (von 1 bis BREITE - 1){
    sysout(" ");//freier Bereich in der Mitte
  }
  
  sysou("*");//rechte Seite
}

//untere Seite
for (von 0 bis BREITE){
  sysout("*");
}
 
Zuletzt bearbeitet:
Du hast in diesem Teil:
Java:
for (hoehe = 0; hoehe < HOEHE - 2; hoehe++) {
	for (breite = 1; breite < BREITE - 1; breite++) {
		System.out.print("");
	}
 
System.out.println("*");
}

2 Fehler. Einerseits machst du System.out.println(""); statt System.out.println(" "); ,gibs also im Endeffekt gar nichts aus. Und ansonsten.. mach es doch so wie in deiner While Schleife auch. Einmal einen "*" ausgeben (linke Seite), dann in einer Schleife die Leerzeichen ranfügen, und danach wieder ein "*". Ich verstehe nicht, wieso du hier nun auf einmal nur ein "*" anfügst, und dich wunderst, dass dir dann eine Kante fehlt. 😛

Hier eine funktionierende Version (einfach austauschen):
Java:
for (hoehe = 0; hoehe < HOEHE - 2; hoehe++) {
    	System.out.println("*");
    	for (breite = 1; breite < BREITE - 1; breite++) {
    		System.out.print(" ");
    	}
     
    	System.out.println("*");
    }



Sehr oft sind solche einfachen Probleme gleichermaßen in for- und while-Schleifen darstellbar, wie hier:

Java:
breite = 0;
do {
	System.out.print(" ");
	breite++;
} while (breite < BREITE - 1);

Du iterierst also über den Wert breite, welcher bei 0 beginnt,und solange dieser kleiner als BREITE-1 ist, und erhöhst ihn dabei immer um 1. Also wird hieraus for(breite = 0, breite < BREITE - 1, breite++){...}

lg
 
Zuletzt bearbeitet:

Zurück
Oben