# Klausurvorbereitung Muster ausgeben



## Norl_ (8. Jan 2015)

Hallo, ich habe schon verzweifelt nach Lösungen on- und offline gesucht und nichts gefunden, hoffe daher, hier findet sich wer der mir helfen kann.
Zu meiner Aufgabe/Problem 
Als Vorbereitung für eine Klausur sollten wir folgende Aufgabe lösen

Schreiben Sie ein Javaprogramm, welches das unter a) aufgeführte Muster auf dem Bildschirm ausgibt.

Die Breite der Figur beträgt 6 Zeichen.

Vorgaben:

Programmieren Sie so einfach und effizient wie möglich!
Verwenden Sie ausschließlich for-Schleifen
Analysieren Sie die Figur und überlegen, in welche geometrischen Grundformen sich diese zerlegen läßt.
Nutzen Sie auch Methoden mit Parameterübergabe.
a)


b) Wie muss der Programmcode erweitert werden, damit die Figur gespiegelt wird?



Den ersten Teil der Aufgabe konnte ich lösen


```
package tutorial;

public class Uebung39 {
	
	public static void zeichneOben(int breite){
		
		for(int i = 0; i < breite; i++){     //Zeile
			for(int j = 0; j < breite*2; j++){	  //Spalte
				if(j <= i)
					System.out.print("1");
			}
			System.out.println("");
		}
	}
	
	public static void zeichneMitte(int breite){
		for(int i = 1; i < breite; i++){     //Zeile
			for(int j = 1; j <= breite*2; j++){	  //Spalte
				if(j <= i || i <= j) 
					System.out.print("3");
			}
			System.out.println("");
		}
	}
		
		
	public static void zeichneUnten(int breite){
		
		int hoehe = breite*3;
		for(int i = 0; i <= hoehe; i++){     //Zeile int i = breite - 1; i >= 0; i--
			for(int j = 0; j < breite; j++){	  
				if(i<=j)						// breit(i) <= hoch(j) || breit >= ((hoehe *2)-1) - hoch || i >= ((breite*2)-1)-j
					System.out.print("2");
												//else System.out.print(" ");
			}
			System.out.println();
		}
	}
	
	public static void main(String[] args){
		int breite = 6;
		zeichneOben(breite);
		zeichneMitte(breite);
		zeichneUnten(breite);
	}
}
```
Nur habe ich jetzt schon Stunden damit verbracht verschiedene Ideen für die Spiegelung auszuprobieren und nichts hat hingehauen. Mittlerweile lässt mich die Aufgabe nicht mehr los, ich möchte das unbedingt lösen 

Ich bin dankbar für jedwede Hilfe oder Tipps

mfg


----------



## Gucky (8. Jan 2015)

Ich sag dir mal, wie ich das lösen würde, unabhängig von deinem Code:

Ich würde eine Methode String machReihe(int anzahl Zeichen, int breite, boolean gespiegelt, char zeichen) erstellen.
anzahl ist die Anzahl der Zeichen, breite die maximale Breite, auf der die Figur basieren soll (breite >= anzahlZeichen), gespiegelt erklärt sich von selbst und zeichen auch.

Ist gespiegelt == false, so würde ich einfach einen StringBuilder erstellen, diesen mit einer Schleife befüllen und fertig.
Ist gespiegelt == true, so würde ich den Rest, der noch von anzahl zu breite fehlt mit leehrzeichen/Tabstopps auffüllen, und dann StringBuilder#append(StringBuilder#reverse()) aufrufen.
Am Schluss steht return StringBuilder#toString().

Also in Pseudocode:

```
public String machZeile(int anzahlZeichen, int breite, boolean gespiegelt, char zeichen){
  if (anzahlZeichen > breite) wirf eine IllegalArgumentException;
  if (zeichen != sichtbares Zeichen) wirf eine IllegalArgumentException;

  StringBuilder sb = new StringBuilder();
  for (von 0 bis anzahl){
    befüll sb mit zeichen;
  }

  if (gespiegelt == true) {
    for (von anzahl bis breite) {
      füll sb mit Leerzeichen/Tabs
    }
    hänge sb verkehrt herum an sb an; //du brauchst dazu ein mal new und zwei Methodenaufrufe
  }
  return sb.toString();
}
```


----------



## Norl_ (8. Jan 2015)

Danke für die sehr schnelle Antwort. Werde das mal umsetzen und dann schauen wie es aussieht, der Prof ist bei sowas teilweise sehr pingelig


----------

