Tannenbaum auf der Konsole ausgeben lassen

ceko1907

Mitglied
Hallo Leute,

unten ist mein Ansatz, aber komme nicht weiter. Danke im Voraus.


Java:
//Schreiben Sie ein Programm, welches einen Tannenbaum in Form von Sonderzeichen auf der Konsole ausgibt (ASCII).
//Die Hoehe des Baumes soll variabel, d.h. mittels eines Parameters einstellbar sein.
//
//Hinweis: Verwenden Sie Schleifen
//
//Beispiel fuer die Ausgabe auf der Konsole:
//
//         *
//        ***
//       *****
//      *******
//     *********
//    ***********
//   *************
//  ***************
// *****************
//*******************
//         I

import java.util.Scanner;

public class E_Tannenbaum {
    public static void main (String[] args) {     
        Scanner s = new Scanner (System.in);
        System.out.println("Bitte geben Sie eine Zahl ein, um die Höhe des Baumes zu bestimmen");
        int eingZahl;
        eingZahl=s.nextInt();
     
     
        for (int i=1; i<=eingZahl; i++){          
            System.out.println("      " + "*");
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Also ein erster Ansatz wäre ja mal, es mit zwei for-Schleifen zu versuchen.
Eine äußere für die Anzahl der Zeilen, und eine innere für das ausgeben der Zeichen in der jeweiligen Zeile.

Und Code bitte in den Java-Tags posten.
 
Java:
public class E_Tannenbaum {
    public static void main (String[] args) {      
        Scanner s = new Scanner (System.in);
        System.out.println("Bitte geben Sie eine Zahl ein, um die Höhe des Baumes zu bestimmen");
        int eingZahl;
        eingZahl=s.nextInt();     
      
        for (int i=1; i<=eingZahl; i++){
            for (int x=1; x<=10; x++);          
            System.out.println();                  
        }                      
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Also ich weiß nicht wie ich diese * darstellen soll. Ich meine ich könnte System.out.println(" *"); eingeben, aber ich komm nicht drauf, wie die Anzahl der Sterne variiert werden soll.
 
Hey du 🙂

Mich hat das selbst interessiert wie man das löst und habe jetz auch ca 15min dafür gebraucht um das hinzubekommen, ist aber ganz leicht eigentlich. Ich werde dir hier keine Lösung vorgeben, aber ien paar Tipps:

1. Lege dir 2 Strings an. Der eine macht die rechte Seite des Baumes, der andere die linke. DIe Ausgabe machst du dann mit [java]System.out.println(ausgabeL + ausgabeR);[/java] wobei du natürlich deine beiden Variablen-Namen einsetzt.
2. du brauchst 3 for-Schleifen:
Die 1. brauchst du für die Höhe des Baumes, sie zählt also die Höhe ab.
Die 2. fügt der linken-Baumseite die Leerzeichen hinzu, für jeden Höhenschritt und Benutzer-eingegebene Höhe anders. Musst also die Parameter geschickt einsetzen.
Die 3. fügt dann der Linken Seite die "*" hinzu, sodass am Ende der Baum entsteht.
Als Screen bei meinem Ergebnis:
4fc64c86a7.png


Bei weiteren Fragen, schreib ruhig, dann helfe ich dir gerne weiter 🙂
 
Zuletzt bearbeitet:
Wobei hier viele Wege nach Rom führen.
Man könnte das ganze auch mit einer for-Schleife machen, dann wäre das grade mal 4 Zeilen 😉

Aber gute Idee!
 
Ich hab das wie gesagt gerade selbst nur mal versucht und nach 5min überlegen bin ich drauf gekommen, beide Seiten einzeln zu erstellen. SO wie ich es momentan hier stehen habe, ist es selbst für Anfänger auch sehr einfach zu verstehen 🙂
Hab sogar links mal in "/" und rechts in "\\" geändert, damit man auf der Konsole die beiden String besser auseinanderhalten kann und es auch besser ausschaut 😀
Dazu nach dem ganzen noch nen Stamm in der Mitte ausgeben, was aber außerhalb der Aufgabenstellung wäre^^ Die ganze Klasse hat 32 Zeilen.
 
bei mir "||", aber halt in der Mitte des baumes, egal wie groß der geworden ist^^ Wenns dort sogar drin steht, könnte es sogar echt zur AUfgabenstellung gehören, das müsste der To aber noch sagen
 
Also habe jetzt mal versucht was zu erreichen aber kriege es nicht hin. Möchte nebenbei bemerken dass ich gerade seit knapp über einer Woche mit Java angefangen und aufgrund meines Studiengangs eigentlich nichts mit Informatik am Hut habe (studiere Wirtschaftsingenieurwesen mit Maschinenbau 😀). Deswegen fällt mir das etwas schwer. Aber hier mal mein "Ansatz". Bitte nicht fertig machen 😀
Code:
public class E_Tannenbaum{
    public static void main (String [] args){

        String L;
        L=" ";


        String R;
        R="*";

        int a,b,c;

        Scanner Höhe = new Scanner (System.in);
        System.out.println("Wie hoch soll der Baum sein?");
        int eingHöhe = Höhe.nextInt();


        for(a=eingHöhe; a<=100; a++){                          //soll die Höhe sein (anzahl der zeilen)
            for (b=a; b<=100; b++){                           //fügt der linken seite die * hinzu
                for(c=a; c<=100; c=a+2){                       //fügt der linken Baumseite die Leerzeichen hinzu (pro Zeile 2 Sterne mehr
        
                    System.out.println(c + a*L + b*R);           //weiß dass man string nicht multiplizieren kann, wollte nur zeigen was ich machen wollte. die ausgabe ist auch völlig falsch :D
    
        


        }}}}}

Ich komme ehrlich gesagt nicht damit klar, dass ich "Zeichen" in Abhängigkeit von Zahlen ausgeben soll. Integer und String Datentypen gemeinsam verwirren mich etwas. Oder ich habe einfach deine Tipps nicht gecheckt. Ich würde mich freuen wenn ihr auf meinen Ansatz eingehen würdet und sagt was ich verbessern muss.
Danke im Voraus für eure Hilfe.
 
Zuletzt bearbeitet:
Wieso willst du immer auf <= 100 prüfen? Wenn man als Höhe 8 eingeben würde würde der 92 Reihen ausgeben. Und ich versteh auch nicht so ganz was du mit den inneren 2 Schleifen erreichen willst, zumal die 3. eine Endlosschleife ist ( a verändert sich erst, sobald die inneren beiden Schleifen fertig sind. Aber die letzte wird erst fertig wenn c + a + 2 >= 100 ist, also wird das nie fertig).

Ich geb dir mal nen Grundaufbau vom ganzen in Worten vor, vllt hilft dir das ja schon zum Ergebnis:
1. Starte den Scanner und frage die gewünschte Höhe des Baumes ab und speicher dir diese. Dann leg dir 2 leere Strings für rechts und links an.
2. Nun erstellst du die erste Schleife, die die Höhe des Baumes darstellt. Sie läuft solange bis die Höhe erreicht ist.
3. In dieser Schleife fügst du der rechten einen Stern hinzu und löscht die linke Seite wieder. Dann erstellst du 2 weitere einzelne Schleifen. Du hast dann also 3 Schleifen, aber 2, die nacheinander ausgeführt werden.
4. In der ersten inneren Schleife fügst du links die Leerzeichen hinzu, abhängig von der Höhe und der eingegebenen gewünschten Höhe.
5. In der 2. inneren Schleife fügst du der Linken Seite die Zeichen hinzu, abhängig von der länge der rechten Seite. Bei deinem Stern Beispiel willst du natürlich eine spitze Spitze, also fängst du bei der 2. Höheneinheit an.
6. Dann gibst du die beiden Seiten aus.

Wenn du das hingekriegt hast, können wir mit dem Stamm weitermachen 🙂

Und PS: Wenn du x mal an einen String was anketten willst, benutzt du dafür ne einfache for-Schleife, sowie ich es oben angedeutet habe. DU lässt die for-Schleife solange laufen, wie du willst und in jedem Durchgang hängst du was hinten/vorne/sonstwo dran
 
Zuletzt bearbeitet:

Zurück
Oben