X Zeichnen als Muster ausgeben

Stangl Puch

Mitglied
Hey Leute,

ich möchte gerne ein Programm machen das ein X in Form von Sternen ausgibt.

Wichtig ist dabei das bei einer geraden Höhe der mittlere Teil etwa so aussieht:

xx
xx

bei einer ungeraden Höhe soll es einfach ein x sein.


Das X sieht bei mir schon einigermaßen gut aus, ich hoffe ihr könnt mir beim Feinschliff helfen ;)


[JAVA=42]public class ZeichnenX{
public static void main(String[]args){

int höhe=9;
int links=0;
int mitte=höhe-2;


for(int i=1;i<=höhe;i++){

while(i<=höhe/2-1){


for(int j=1;j<=links;j++){
System.out.print(" ");
}

System.out.print("*");

for(int j=1;j<=mitte;j++){
System.out.print(" ");
}

System.out.println("*");

links++;
mitte-=2;
i++;

}

if(höhe%2==0&&i==höhe/2-1||höhe%2==0&&i==höhe/2+1){
System.out.println("**");
}else if(höhe%2==5&&i==höhe/2-1||höhe%2==5&&i==höhe/2+1){
System.out.println("*");
}


if(i>höhe/2){
while(i<=höhe){

for(int j=1;j<=links;j++){
System.out.print(" ");
}

System.out.print("*");

for(int j=1;j<=mitte;j++){
System.out.print(" ");
}

System.out.println("*");

links--;
mitte+=2;
i++;


}
}

}

}
}
[/code]
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
puh, schwer so komplexen Code noch zu erweitern,
was immer du an Problemen mit speziellen Situationen hast, kannst du fast mit weiteren je 5 Zeilen Code behandeln..,
sofern du weiß wo und wie

ansonsten:
besonders die Verkleinerungsphase am Anfang + entgegengesetzt am Ende kann man geschickt zusammenlegen,
schau dir dieses Programm an, was zugegebenermaßen etwas abgehoben ist, aber vielleicht bringt dir das schon Ideen für dein Programm:
Java:
public class Test {
    public static void main(String[] args)  {
        int höhe = 9;
        int höhe2 = höhe / 2;
        int shift = höhe % 2; // 0 der 1, je nach gerade/ungerade

        for (int i = 1; i <= höhe; i++)  {
            int k = i > höhe2 ? höhe - i + 1 : i;
            // k zur Untersuchung am besten mit System.out.println am Ende der Zeile loggen, 
            // zählt anfangs hoch wie i, ab der Mitte wieder bis auf 1 runter 
            int abstand = höhe2 - k;
            male(k - 1, ' ');
            System.out.print("*");
            if (abstand >= 0)  {
                male(abstand * 2 + shift, ' ');
                System.out.print("* ");
            } // wenn nicht, dann ist gerade die Mitte dran
            System.out.println();
        }
    }

    private static void male(int n, char c)  {
        for (int j = 1; j <= n; j++)  {
            System.out.print(c);
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:

Andi_CH

Top Contributor
Du zeichnest noch eine Zeile zu viel.

Tipp: Mach doch eine Funktion daraus und übergibt den Wert per Parameter - das ist doch viel einfacher um zu testen.

Das ist extrem gefährlich - du veränderst im while loop die Zählervariable des umgebenden for-loops!!! Das gehört in die Kategorie "Verboten"!

Ich blicke nicht durch was du überhaupt willst ...

Java:
		for(int i=1; i<=höhe; i++) {
			while(i<=höhe/2-1) {
				for(int j=1; j<=links; j++) {
					System.out.print(" ");
				}
				System.out.print("*");
				for(int j=1; j<=mitte; j++) {
					System.out.print(" ");
				}
				System.out.println("*");
				links++;
				mitte-=2;
				i++; // Das ist der HORROR
			}
 

nrg

Top Contributor
Du kannst auch wiederkehrende Teile in Methoden auslagern und mit Math arbeiten.

Java:
	public static void main(String[]args){   	 
		int height = 10;
		for (int i = 0;i <= height; i++) {
			printWhitespace(Math.min(i, height-i));
			System.out.print("*");
			printWhitespace(Math.max(height-(i*2), height-((height-i)*2)));
			System.out.print("*");
			System.out.println();
		}
	}
	public static void printWhitespace(int length) {
		for (int i = 0; i < length; i++)
			System.out.print(" ");
	}

dient eher als kleines Beispiel. Mit dem Code wäre nämlich die Angabe nicht so ganz erfüllt:
Wichtig ist dabei das bei einer geraden Höhe der mittlere Teil etwa so aussieht:

xx
xx

bei einer ungeraden Höhe soll es einfach ein x sein.

edit: und druckt zudem eine Zeile zuviel. wie gesagt. nicht für copy&paste gedacht. eher als anregung
 

Andi_CH

Top Contributor
ich hoffe ihr könnt mir beim Feinschliff helfen ;)

Also ich hab den Code auf Lager - basierend auf deiner Idee mit den loops und dem halbieren der Zeichnung. Aber einfach so gibts den nicht :)

Versuche herauszufinden wie du wie Werte in meinem Pseudocode berechnen würdest.
Am Schluss können wir immer noch vergleichen :)

Sämtliche gefragten Werte lassen sich aus den drei folgenden Werten berechnen:

zeilenzaehler (unten läuft der rückwärts - es können als exakt dieselben Formeln verwendet werden wie im ersten Teil.

pAnzahl

zeilen

Java:
public class ZeichnenX {

	private static void zeichneSpaces(int pAnzahl) {
		for(int i=0; i<pAnzahl; i++)
			System.out.print(" ");
	}
	public static void zeichne (int pAnzahl){
		boolean ungerade = (pAnzahl%2==1);
		int zeilen = pAnzahl/2;

		// Obere Zeilen
		for(int zeilenzaehler=0; zeilenzaehler<zeilen; zeilenzaehler++) {
			// führende spaces == zeilennummer
			zeichneSpaces(?wieviele?);
			// erster Stern
			System.out.print("*");
			// mittlere Spaces
			zeichneSpaces(?wieviele?);
			// zeichen den zweiten Stern
			System.out.println("*"); // mit Zeilenende
		}
		// Mittlere Linie falls ungerade
		if(ungerade) {
			// führende spaces
			zeichneSpaces(zeilen); // Den schenk ich dir :-)
			System.out.println("*");
		}
		// untere Zeilen
		// genau umgekehrte Reihenfolge wie oben
		for(int zeilenzaehler=zeilen-1; zeilenzaehler>=0; zeilenzaehler--) {
			// führende spaces == zeilennummer
			zeichneSpaces(?wieviele?);
			// erster Stern
			System.out.print("*");
			// mittlere Spaces
			zeichneSpaces(?wieviele?);
			// zeichen den zweiten Stern
			System.out.println("*"); // mit Zeilenende
		}
	}

	public static void main(String[] args) {
		zeichne(7);
		System.out.println("");
		zeichne(8);
		System.out.println("");
	}
}
 

Stangl Puch

Mitglied
Danke für eure Lösungvorschläge ;)

Habs mittlerweile hinbekommen!

Hier meine Lösung ;)


Java:
public class ZeichnenX{
	public static void main(String[]args){

		int höhe=8;
		int links=0;
		int mitte=höhe-2;
		int höhe1;					//Bedin.-Variable für den ersten Teil
		boolean gerade=true;
		int mitte1=0;				//für den mittleren Teil
		int mitte12=0;				//für den mittleren Teil
		int links1=höhe/3;			//für unten
		int mitteunten=0;			//für unten

		if(höhe%2==0){				//es wird bestimmt ob die Zahl gerade ist
			gerade=true;
			höhe1=höhe/2-1;
			mitte1=höhe/2;
			mitte12=höhe/2+1;
		}
		else{
			gerade=false;
			höhe1=höhe/2;
			mitte1=höhe/2+1;
		}

		if(gerade==true){
			mitteunten=2;
		}
		else if(gerade==false){
			mitteunten=1;
		}


		for(int zaehlvariable=1;zaehlvariable<=höhe;zaehlvariable++){


			//oberer teil
			if(zaehlvariable<=höhe1){


				for(int j=1;j<=links;j++){
					System.out.print(" ");
				}

				System.out.print("*");

				for(int j=1;j<=mitte;j++){
					System.out.print(" ");
				}

					System.out.println("*");

				mitte-=2;
				links++;

			}

			//mittlerer Teil


			if(zaehlvariable==mitte1||zaehlvariable==mitte12){

				if(gerade==true){

				for(int j=1;j<=höhe/2-1;j++){
					System.out.print(" ");
				}

				}

				else if(gerade==false){
					for(int j=1;j<=höhe/2;j++){
						System.out.print(" ");
					}
				}
				if(gerade==true){
					System.out.println("**");
				}
				else if(gerade==false){
					System.out.println("*");
				}
			}


			//unterer Teil

			if(zaehlvariable<=höhe&&zaehlvariable>höhe/2+1){




				for(int j=1;j<=links1;j++){
					System.out.print(" ");
				}

				System.out.print("*");

				for(int j=1;j<=mitteunten;j++){
					System.out.print(" ");
				}

				System.out.println("*");

				mitteunten+=2;
				links1--;

			}

		}
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
K 3D Fläche Zeichnen Java Basics - Anfänger-Themen 2
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
R Iterativ zeichnen Java Basics - Anfänger-Themen 1
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
KogoroMori21 Mit einer Schleife eine Treppe zeichnen Java Basics - Anfänger-Themen 29
V Speicherzustand zeichnen Java Basics - Anfänger-Themen 0
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
Mosquera f(x)=x² zeichnen Java Basics - Anfänger-Themen 5
J Graphen in Java zeichnen Java Basics - Anfänger-Themen 11
L Anfängerin möchte Linie zeichnen Java Basics - Anfänger-Themen 8
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
S Zeichnen mit Wiederholungen Java Basics - Anfänger-Themen 12
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
P Einen String mittig zeichnen? Java Basics - Anfänger-Themen 1
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
W Wie kann ich in Java eine Kurve aus Punkten zeichnen? Java Basics - Anfänger-Themen 25
snipesss Linie zeichnen ohne extra Klasse? Java Basics - Anfänger-Themen 3
C Umrisse von Bilddateien mithilfe Polygonen zeichnen Java Basics - Anfänger-Themen 5
G Aus einem Code ein Sequenzdiagramm zeichnen? Java Basics - Anfänger-Themen 1
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
B Java Graphen zeichnen - Brauche Hilfe Java Basics - Anfänger-Themen 9
C Schleifenaufgabe - Molekül zeichnen Java Basics - Anfänger-Themen 6
K Ungenauigkeit beim Zeichnen von Funktionen Java Basics - Anfänger-Themen 6
H Linie zeichnen... Java Basics - Anfänger-Themen 16
N Treppe zeichnen Java Basics - Anfänger-Themen 1
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
M in Java zeichnen Java Basics - Anfänger-Themen 2
J JLabel Icon neu zeichnen Java Basics - Anfänger-Themen 2
J Rechteck zeichnen mit Canvas Java Basics - Anfänger-Themen 7
D Zeichnen, Schleifen Java Basics - Anfänger-Themen 7
S Zeichnen , Schleifen Java Basics - Anfänger-Themen 4
S Rechteck zeichnen Java Basics - Anfänger-Themen 2
S Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!? Java Basics - Anfänger-Themen 4
S Wo beginnt ein Draw String zu zeichnen. Java Basics - Anfänger-Themen 4
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
llabusch Layout neu zeichnen lassen Java Basics - Anfänger-Themen 2
A Histogramm zeichnen Java Basics - Anfänger-Themen 2
S Punkt in Java zeichnen Java Basics - Anfänger-Themen 14
E Dreieck zeichnen Java Basics - Anfänger-Themen 3
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
C Hilfe beim Zeichnen Java Basics - Anfänger-Themen 8
D Haus zeichnen Java Basics - Anfänger-Themen 4
K Methoden Objekt auf JFrame zeichnen Java Basics - Anfänger-Themen 16
H 27 Kreise Zeichnen Java Applet Java Basics - Anfänger-Themen 2
S Problem mit "Zeichnen auf Kommando" Java Basics - Anfänger-Themen 2
M Double Punkte Zeichnen Java Basics - Anfänger-Themen 7
S Funktionen zeichnen Java Basics - Anfänger-Themen 2
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
R 2D Grafik zeichnen Java Basics - Anfänger-Themen 4
F Line zeichnen und Werte ändern Java Basics - Anfänger-Themen 6
B Grafik zeichnen Java Basics - Anfänger-Themen 25
B Erste Schritte Weihnachtsbaum zeichnen Java Basics - Anfänger-Themen 6
N Per Button Kreis zeichnen Java Basics - Anfänger-Themen 8
T mehrere Punkte zeichnen ohne löschung Java Basics - Anfänger-Themen 4
J Für 3 Sekunden etwas bestimmtes zeichnen Java Basics - Anfänger-Themen 8
C Kreis nach Mausklick zeichnen Java Basics - Anfänger-Themen 5
C Auf Button-Druck zeichnen Java Basics - Anfänger-Themen 2
R Methoden Zeichnen auf Button-Druck durch Paint-Methode Java Basics - Anfänger-Themen 2
D Klassen Zeichnen von Figuren mittels vorgegebener Klasse Java Basics - Anfänger-Themen 3
J Schachbrett zeichnen Java Basics - Anfänger-Themen 9
J Innerhalb der Border zeichnen Java Basics - Anfänger-Themen 9
J Hoher Speicherverbrauch beim Zeichnen von Images aus einer ArrayList Java Basics - Anfänger-Themen 10
A Blitze mit Linien zeichnen Java Basics - Anfänger-Themen 15
U Kreis um Textfelder zeichnen Java Basics - Anfänger-Themen 4
R Balkendiagramm zeichnen Java Basics - Anfänger-Themen 14
J Bild anhand von Koordinaten zeichnen Java Basics - Anfänger-Themen 10
B GUI Parkplatz zeichnen Java Basics - Anfänger-Themen 10
S Mehrere Zeichnungen zeichnen Java Basics - Anfänger-Themen 16
A Linie Zeichnen Applet mit Double Wert Java Basics - Anfänger-Themen 3
F Image übertragen und zeichnen Java Basics - Anfänger-Themen 8
P Funktion zeichnen Java Basics - Anfänger-Themen 6
Q Zeichnen außerhalb der paint-methode Java Basics - Anfänger-Themen 7
F zeichnen in JPanel Java Basics - Anfänger-Themen 7
T Transparente Bilder mit Graphics zeichnen Java Basics - Anfänger-Themen 17
T Sterne zeichnen Java Basics - Anfänger-Themen 4
M Bilder laden und zeichnen Java Basics - Anfänger-Themen 3
G Polygon in Frame zeichnen Java Basics - Anfänger-Themen 3
P Kurven zeichnen Java Basics - Anfänger-Themen 5
I dauerhaftes zeichnen Java Basics - Anfänger-Themen 3
H Zeichnen in JPanel Java Basics - Anfänger-Themen 8
W Funktions-Graphen "zeichnen" Java Basics - Anfänger-Themen 2
J Bilder auf Bilder zeichnen Java Basics - Anfänger-Themen 8
I Rechteck Zeichnen Java Basics - Anfänger-Themen 9
W Zeichnen in Swing Java Basics - Anfänger-Themen 7
N Linie auf spezielle Area zeichnen Java Basics - Anfänger-Themen 9
K Auf JPanel Zeichnen Java Basics - Anfänger-Themen 8
E Frame neu Zeichnen Java Basics - Anfänger-Themen 3
D Problem beim Zeichnen von "Das Haus vom Nikolaus" Java Basics - Anfänger-Themen 10
M Farbiges Rechteck zeichnen Java Basics - Anfänger-Themen 2
M Zeichnen in Java Java Basics - Anfänger-Themen 4
D Wie kann meine Klasse in ein JPanel zeichnen? Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben