Pyramide auf Konsole ausgeben? Leerzeichen-Problem!

puschelemo21

Mitglied
Hi,
ich soll ne Pyramide ausgeben und hab die mit for-schleife schon realisiert.
ich bekomm nur kein Leerzeichen rein weil dann gitbs Fehler

Java:
public class Aufg5a {
public static void main(String[] args) {
final char wert='+';
char leer= ' ';
int zaehler;
 {
 for (zaehler = 1; zaehler<= 4; zaehler = zaehler + 1)
       System.out.print (wert);
       System.out.println (wert);
       for (zaehler = 2; zaehler <= 3; zaehler = zaehler + 1)
                System.out.print(wert );
                System.out.println (wert);
           for (zaehler = 3; zaehler == 3; zaehler = zaehler + 1)
                System.out.println (wert);
       }
  {
 for (zaehler = 2; zaehler<= 3; zaehler = zaehler + 1)
       System.out.print (wert);
       System.out.println (wert);
       for (zaehler = 1; zaehler <= 4; zaehler = zaehler + 1)
                System.out.print(wert );
                System.out.println (wert);

       }


}
}
also in der zweiten Zeile ein Leerzeichen vor der Ausgabe un in dritten 2 in der vierten wieder 1 dann wird es ne Sanduhr aber wenn ich die Variable schreib dann schreibt er mir die Werte getrennt :( Hoffe jemand kann mir helfen
 

ARadauer

Top Contributor
mhn das ist wohl nicht Sinn der Sache. Ich denke eher dass die aufgabenstellung die ist, dass du die Breite der Pyramide eingibst und diese automatisch gezeichnet wird. Was du machst ist dass du einfach für jede Zeile eine For Schleife machst die mehr oder weniger absichtlich eine Anzahl von + ausgibt.

Wie soll denn das Ergebnis aussehen?

Ich würde auch bei jeder for Schleife die Klammern schreiben. Dann wird es übersichtlicher
 
P

puschelemo

Gast
habs erledigt hab vor der nächsten for-schleife einfach system.out.print (" "); gehaun ^^nun hängts bei 'While-schleife.. dreckeck is gleichschenklig runter
 

Camill

Bekanntes Mitglied
Hab dein Code mal ein wenig formatiert:
Java:
public class Aufg5a {
	
	public static void main(String[] args) {
		
		final char wert='+';
		int zaehler;
		
		{
			for(zaehler = 1; zaehler <= 4; zaehler++)
				System.out.print(wert);
			
			System.out.println(wert);
			
			for(zaehler = 2; zaehler <= 3; zaehler++)
				System.out.print(wert);
			
			System.out.println(wert);
			
			for(zaehler = 3; zaehler == 3; zaehler++)
				System.out.println(wert);
		}
		
		{
			for(zaehler = 2; zaehler <= 3; zaehler++)
				System.out.print(wert);
			
			System.out.println(wert);
			
			for(zaehler = 1; zaehler <= 4; zaehler++)
				System.out.print(wert);
			
			System.out.println(wert);
		}
	}
}

Wo genau liegt nun das Problem, sehe keine while-Schleife(Wie lautet die Aufgabe)? Außerdem für was setzt du überflüssige Klammern(Zeile 8, 21, 23, 33)?
 

puschelemo21

Mitglied
das problem is wie bau ich die while-schleife ich habs jetzt mit FOR realisiert mit WHILE hab ich das nu
Java:
// Konstanten
int zaehler = 1; // Schrittweite
final char wert='+';


// als Anfangswert wird fahr
// der Wert 0 zugewiesen
while (zaehler<= 5)
{
System.out.print (wert);
zaehler++;
System.out.print(" ");
break;
ausgabe 1 zeichen zaehler wird NICHT hochgezählt. mit FOR isses einfacher aber ich muss es eben auch mit while realisieren >.<
 

Camill

Bekanntes Mitglied
Kann ich mir nicht vorstellen das dies die Aufgabe ist, wäre ja zu leicht:
Java:
	while(true) {			
		System.out.println("+++++\n +++\n  +");
		break;
	}
Die while-Schleife ist völlig überflüssig aber sollte ja laut deiner Aufgabenstellung vorkommen.
 

puschelemo21

Mitglied
das is die aufgabe nur mit dem dreieck rückwärts rum (for-schleife) dasselbe muss ich halt auch mit while machen :/
kann dir ja den Text posten ^^



Schreiben Sie ein kleines Programm, das auf dem Bildschirm ein Dreieck von folgender Form erzeugt.

+++++
+++
+

Die Seitenlänge des Dreiecks (erste Zeile) sowie das Füllzeichen (hier +) sollen am Anfang des Programms als Konstante festgelegt werden.
Realisieren Sie die Aufgabe mit mind. 2 Schleifentypen und vergleichen Sie das Ergebnis. Welcher Schleifentyp erscheint Ihnen hier am besten geeignet?

Erweitern Sie nun das Programm so, dass ein "Stundenglas" von folgender Form entsteht.
 

Camill

Bekanntes Mitglied
Na dann entspricht die Aufgabe wohl doch dem Gedanken von "ARadauer", die breite soll am Anfang des Programm festgelegt werden.
 

puschelemo21

Mitglied
ich bin Anfänger in der Programmierung und weis langsam echt nicht mehr weiter das macht mich so richtig fertig das der prof...von klein auf gleich 10 geht... ......... ich hab noch nichtma die vorherige Aufgabe abgegeben weil mehrere Leute nicht mitkommen und ich nicht mehr weis was ich noch tun soll..... ;(
 

Camill

Bekanntes Mitglied
So, hier hast du mal ein Beispiel wie das ganze mit for-Schleifen aussehen kann(breite kann nun auch verändert werden):
Java:
	final int BREITE = 5;
	final char ZEICHEN = '+';
	int lines;
	
	//calculate number of lines
	if(BREITE % 2 == 1) {
		lines = (BREITE - 1) / 2 + 1;			
	} else {
		lines = BREITE / 2;			
	}
	
	//draw pyramid
	for(int i = 0; i < lines; i++) {
		
		//whitespace
		for(int j = 0; j < i; j++) {
			System.out.print(" ");
		}
		
		//print out character
		for(int j = 0; j < BREITE - (i * 2); j++) {
			System.out.print(ZEICHEN);
		}
		
		System.out.println();
	}

Hoffe das es zu verstehen ist.
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
ich bin Anfänger in der Programmierung und weis langsam echt nicht mehr weiter das macht mich so richtig fertig das der prof...von klein auf gleich 10 geht... ......... ich hab noch nichtma die vorherige Aufgabe abgegeben weil mehrere Leute nicht mitkommen und ich nicht mehr weis was ich noch tun soll..... ;(

Leute Leute! Das sind normale Anfänger Beispiele die am Anfang des ersten Semesters gegeben werden. Diese Pyramide hat jeder von uns schon mal geschrieben. Das ist ein standard Beispiel! Von klein gleich auf 10? Wenn du wüsstes was da noch kommt ;-) Also aufhören dich selbst zu bemitleiden. Das wird schon!

Um was gehts? Es geht darum aufgrund der Breite der Pyramide i, die Anzahl der Leerzeichen die vorher stehen müssen zu errechnen.
for(int i = 1; i < höhe; i=i+2){
hier jetzt breite errechnen..

Ob das Teil jetzt mit while oder verkehrt ist, wurscht... dann muss man sich einfach aunschaun was while macht.
 
Zuletzt bearbeitet:

puschelemo21

Mitglied
aber man kann ja while nicht verschachteln...
trotzdem thx. und ich bemitleide mich nicht nur ich rast jetz dann aus und dann lauf ich wirklich AMOK


meine for-schleife macht nun auch was ich will o.o
Java:
public class Aufg5a {
public static void main(String[] args) {
final char wert='+';
int zaehler;
 {
 for (zaehler = 1; zaehler<= 4; zaehler = zaehler + 1)
       System.out.print (wert);
       System.out.println (wert);
       System.out.print(" ");
       for (zaehler = 2; zaehler <= 3; zaehler = zaehler + 1)

                System.out.print(wert);
                System.out.println (wert);
                System.out.print("  ");
           for (zaehler = 3; zaehler == 3; zaehler = zaehler + 1)

                System.out.println (wert);
                System.out.print(" ");
       }
  {
 for (zaehler = 2; zaehler<= 3; zaehler = zaehler + 1)
       System.out.print (wert);
       System.out.println (wert);
       for (zaehler = 1; zaehler <= 4; zaehler = zaehler + 1)
                System.out.print(wert );
                System.out.println (wert);

       }
}
}
 

puschelemo21

Mitglied
also mit While hab ich folgendes:
Java:
// Konstanten
int zaehler = 1; // Schrittweite
final char wert='+';
while (zaehler<= 5)
{
System.out.print (wert);
zaehler++;
         while(zaehler<=3)
         {
          System.out.print(" ");
          System.out.println (wert);
          zaehler++;
         }

}
}
}
die Ausgabe sieht so aus:
+_+
_+
++ die _ stellen wieder die Leerzeichen dar aber ich soll ja die selbe Ausgabe wie for-Schleife bekommen?!
 

Michael...

Top Contributor
Ich kenne zwar die genaue Aufgabenstellung nicht, aber ich vermute mal, dass Deine "Lösung" mit den for-Schleifen vom Lehrer nicht aktzeptiert werden wird.

Das Problem mit der Abbildung einer for-Schleife in eine while verstehe ich nicht.
Java:
for (int i=0; i<n; i++) {
    //mach was
}
entspricht einfach nur:
Java:
int i = 0;
while(i<n) {
    //mach was
    i++;
}
 

ARadauer

Top Contributor
for (zaehler = 1; zaehler<= 4; zaehler = zaehler + 1)
for (zaehler = 2; zaehler <= 3; zaehler = zaehler + 1)
das wird nicht stimmen.
da kannst gleich schon einen zettel mit pyramide abgeben.

hör auf irgendwie rum zu probieren und überleg dir wie viele leer zeichen und x du in der ersten zeile bei einer 5 zeichen hohen pyramide machen musst.
dann in der 2. 3. 4. 5. zeile und dann versuchst du das in eine formel zu packen und machst eine schleife...
 

ARadauer

Top Contributor
ok kleine hilfestellung

Java:
public class Pyramide {

	
	public static void main(String[] args) {
		int höhe =8;
		
		for(int i = 0; i < höhe; i++){
			int x =// wie viele X?
			int leer = // wie viele leerzeichen?
			printZeichen(leer, ' ');
			printZeichen(x, 'X');
			System.out.println();
		}
	}
	
	public  static  void printZeichen(int anzahl, char zeichen){
		for(int i =0; i < anzahl; i++){
			System.out.print(zeichen);
		}
	}
}

Lösung in ganz klein:
int x = i*2+1;
int leer = höhe-1-i;


das selbe mit while

Java:
public class Pyramide {

	
	public static void main(String[] args) {
		int höhe =3;
		
		int i =0;
		while(i< höhe){			
			int x =//das musst du machen
			int leer = // nicht schwer
			printZeichen(leer, ' ');
			printZeichen(x, 'X');
			System.out.println();
			i++;
		}
	}
	
	public  static  void printZeichen(int anzahl, char zeichen){
		while(anzahl >0){
			anzahl--;
			
			System.out.print(zeichen);
		}
	}
}
 

Neue Themen


Oben