[Java] Baum erstellen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Securom, 21. Dezember 2008 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 21. Dezember 2008
    Baum erstellen

    Hallo,

    ich poste hier mal meinen bisherigen Code und teile euch dann die Fehler mit, die ich ausgeworfen bekomme:

    Code:
    public class Weihnachtsbaum {
     public static String baum(int n) {
     
     int c= 2*n-1; //Breite des Baumes
     //Ausgabe zentrieren
     
     for (int j=(2*n-1)/2; j<c; j++) { //Prüft ob Zeile n erreicht wurde. Wenn nicht, dann erst einmal (2n-1)/2 Leerzeichen setzen und dann einen Stern
     System.out.print(+ j + " " + "*");
     System.out.print(+ 2*n-1 + "*"); //Wenn Zeile n erreicht wurde und j=c ist, sollen 2*n-1 Sternchen ausgegeben werden.
     }
     System.out.println(); //Zeilenumbruch
     } 
     }

    Ich soll einen Baum (Weihnachtsbaum/Tannenbaum) erstellen. Die Höhe n soll in einer Main-Methode akzeptiert werden. (Was ich hier noch nicht getan habe, da ich nicht weiß, wie ich es implementieren soll)
    Ich dachte mir, dass ich die Breite von der Höhe abhängig mache.

    Aber bekomme als Fehlermeldung: "missing return statement" zurück.

    Auch bin ich mir nicht sicher, wie ich mit dem "System.out.print"-Befehl richtig umgehen kann.
    Die Kommentare im Code sollen verdeutlichen, was ich mir dabei gedacht habe.

    Ich muss dazu sagen, ich bin java-Anfänger und das hier ist mein erster Versuch.

    Ich hoffe, ihr könnt' mir etwas auf die Sprünge helfen.

    Liebe Grüße
     
  2. 21. Dezember 2008
    AW: Baum erstellen

    Code:
    public class Weihnachtsbaum {
     public static [color=red]void[/color] baum(int n) {
     
     int c= 2*n-1; //Breite des Baumes
     //Ausgabe zentrieren
     
     for (int j=(2*n-1)/2; j<c; j++) { //Prüft ob Zeile n erreicht wurde. Wenn nicht, dann erst einmal (2n-1)/2 Leerzeichen setzen und dann einen Stern
     System.out.print(+ j + " " + "*");
     System.out.print(+ 2*n-1 + "*"); //Wenn Zeile n erreicht wurde und j=c ist, sollen 2*n-1 Sternchen ausgegeben werden.
     }
     System.out.println(); //Zeilenumbruch
     } 
     }
    die funktion erwartet einen rückgabewert vom typ string. da du nichts zurückgeben musst deklarier die funktion einfach als void und dein missing return statement ist weg.

    Greetz jojo
     
  3. 21. Dezember 2008
    Mein Problem ist aber dann die Aufgabenstellung. Ich zitiere sie mal für dich:
    Die Fragen, die sich mir nun stellen: Kann ich es auch als String darstellen oder ist void ein Muss?
    Wie kann die Klasse als Main deklarieren, so dass ich n als Parameter nach Aufruf eingeben kann?
    Wie kann ich die Anzahl der "System.out.print" bestimmen? Ich möchte ja pro Zeile eine unterschiedliche Anzahl von Leerstellen und eine unterschiedliche Anzahl von Sternen bekommen.

    lg
    btw: Bewertungen sind must-have für jede konstruktive Hilfe



    Edit: Um es deutlicher zu machen, was ich als Ausgabe hinterher stehen haben möchte:
    Code:
    Eingabe: n=4
     *
     ***
     *****
    *******
    

    Den Stamm des Baumes schreibe ich noch extra in eine andere Prozedur. Mir geht es hier in erster Linie um die Realisierung der Krone.

    Ich habe es jetzt mal umgeschrieben:

    Code:
    public class Weihnachtsbaum {
    
     /**
     *@param i,j Mit Hilfe der Parameter i,j werden Zeilen/Spalten eingelesen und der Baum gezeichnet
     *@param n Der Parameter n ist ein variabler Parameter, der die Höhe des Baumes bestimmt.
     */
    
     public static void main (String[] args)
     {
     int i, j; //i Zeilen, j Spalten!
     int n; //n ist die Höhe des Baumes.
    
    
    
    
     //"Krone" des Baumes zeichnen
     for (i=1; i<=n; i++) {
    
     for (j=1; j<=n-i; j++)
     System.out.print(" ");
    
     for (j=1; j<=(2*i-1); j++)
     System.out.print("*");
    
     System.out.println();
     }
    
     // "Stamm" einzeichnen
     for (i=1; i<n; i++)
     System.out.print(" ");
     System.out.println("I");
    
     }
    
    }
    
    

    Nun habe ich den "String" ebenfalls durch ein void ersetzt, da String für mich irgendwie keinen Sinn macht. Doch nun fehlt mir die Eingabe unter "int n;"... Wie muss ich vorgehen, dass der Compiler den Parameter n akzeptiert, ihn aber erst nach Eingabe verarbeitet? Schließlich soll n variabel sein.
     
  4. 22. Dezember 2008
    AW: Baum erstellen

    du sollst nen string zurückgeben, d.h. du musst in der funktion einen string generieren und ihn dann zurückgeben. nicht ausgeben. also nicht system.out... benutzen. nur den strng bearbeiten.
     
  5. 22. Dezember 2008
    AW: Baum erstellen

    um ein argument in einer main zu erwarten musst die das args array auswerten. dort werden die parameter, welche nach dem programmaufruf eingegeben werden gespeichert.
    Du musst dann also für die eingabe z.B. "java programmname 4" das argument args[0] von string nach int konvertieren und dann deiner variablen n zuweisen.
    Umwandeln kannst de mit
    Code:
    int n = Integer.parseInt(args[0]);
    
    Greetz Jojo
     
  6. 22. Dezember 2008
    AW: Baum erstellen

    Hey,

    du musst den Baum einfach nicht direkt ausgeben, sondern einen String erstellen:
    Code:
    public class Weihnachtsbaum {
    
     public static String baum(int n) {
     [COLOR="Red"]String result;[/COLOR]
     int c= 2*n-1; //Breite des Baumes
     //Ausgabe zentrieren
     
     for (int j=(2*n-1)/2; j<c; j++) { //Prüft ob Zeile n erreicht wurde. Wenn nicht, dann erst einmal (2n-1)/2 Leerzeichen setzen und dann einen Stern
     [COLOR="Red"]result.append[/COLOR](j + " " + "*");
     [COLOR="Red"]result.append[/COLOR](2*n-1 + "*"); //Wenn Zeile n erreicht wurde und j=c ist, sollen 2*n-1 Sternchen ausgegeben werden.
     }
     [COLOR="Red"]result.append("\n");[/COLOR] //Zeilenumbruch
     [COLOR="Red"]return result;[/COLOR] 
     }
    
     [COLOR="Red"]public static void main (String[] args) {
     int n = Integer.parseInt(args[0]);
     System.out.print(baum(n));
     }[/COLOR]
    
     }
    
    Ob es das append wirklich gibt weiß ich nicht. Musst du dann einfach durch die richtige Weise, in der man in Java Strings verknüpft ersetzen.

    Chillikid
     
  7. 22. Dezember 2008
    AW: Baum erstellen

    Dafür gibts in Java die Klasse StringBuilder. dort gibts die Methode append().
    Code:
    StringBuilder result = new StringBuilder();
    result.append("lalala");
    
    Greetz jojo
     
  8. 22. Dezember 2008
    AW: Baum erstellen

    Vielen Dank euch allen. Bewertung habt ihr alle. Ich versuch den Quellcode wie beschrieben umzuschreiben und wenn ich noch Probleme haben sollte, frage ich noch einmal genauer nach.

    lg
     
  9. 22. Dezember 2008
    AW: Baum erstellen

    Bis dahin....

    ~closed~

    Mfg,

    Kolazomai
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.