# Christbaum mit Sternen programmieren



## Mela2080 (28. Dez 2004)

Hallo,

ich hab folgendes Problem, ich soll einen Christbaum, abhängig von der Stammhöhe programmiern. 

Die Stammhöhe soll eingegeben werden und dann soll 
die unterste Reihe des Baumes soll wie folgt berechnet werden:
wipfelbreite = 4 * stammhöhe + 1  
was auch noch funktioniert.

Mein Code sieht wie folgt aus:


```
public class Christbaum {

	public static void main(String[] args) {
		int stammhoehe = Terminal.getInt("Bitte geben Sie die gewünscht Stammhöhe ein: ");
		int wipfelbreite=4*stammhoehe+1;
		String wipfel ="";
		
		for(int e=0 ;(e<wipfelbreite);e++)
		{	
			
			wipfel+="*";
			if(e%2==0) 
		
			System.out.println(wipfel);
			
		}
		
		for (int i=0; i<stammhoehe;i++)
			System.out.print("*\n");
	}
}
```

Mein Problem ist jetzt, dass ich nicht weiß wie ich den ersten Stern um 2 * die Stammbreite nach rechts einrücken kann, und dann jede Zeile drunter um ein Leerzeichen weniger, so dass man bei der Wipfelbreite dann am linken Rans angelangt ist, und quasi ein Dreieck entstanden ist.
Vielleicht kann mir jemand helfen  :?:  :!:  :?:


----------



## Manfred (28. Dez 2004)

Was soll die Wipfelbreite sein?? Die Anzahl der Sterne ganz unten??
Ich nehme an das sollte herauskommen:


```
*
  ***
 *****
*******
```
Die Darstellung schaff ich net...

Das wäre Stammhöhe 4, die unterste Zeile hat höhe*2-1 Sterne. Laut deiner Angabe sollte 4*4+1 berechnet werden, was ja 17 wäre, nur was soll diese Zahl aussagen?

So, hab mich mal herumgespielt:


```
public class dreieck
{
    public static void main(String[] args)
    {
        int hoehe=12;
        
        for(int zeile=0; zeile<hoehe; zeile++)
        {
            for(int spalte=0; spalte<(hoehe*2-1); spalte++)
            {
                if(spalte>=(hoehe-zeile-1) && spalte<=(hoehe+zeile-1))
                    System.out.print("*");
                else
                    System.out.print(" ");
            }
            System.out.println();
        }
    }
}
```


----------



## Mela2080 (28. Dez 2004)

Ja die Wipfelbreite soll die unterste Zeile des Baumes sein. Ich will quasi sagen mein Baum soll einen Stamm von zwei Sternen haben, dann sollte das so aussehen für die unterste Baumreihe mit neun Sternen (4 * Stammhöhe+1)

*********
       *
       *
Die zwei vom Stamm sollten unter dem 5 stehen, was man hier leider nicht wirklich sehen kann.
Jedenfalls bekomm ich mit dem Code schonmal das Baumdreick


----------



## Manfred (28. Dez 2004)

Zeig mal deinen Code her!

Also du willst so einen Baum wie mein Code ihn erzeugt, nur mit 2 Sternen unten als "Stiel"/Stamm ??


----------



## Gast (28. Dez 2004)

Bau mal folgende Zeilen in deine main-Methode ein:




```
String baum = "";
                                int hoehe = 4;

                                for(int k = 1; k <= hoehe; k++){
					for(int g = 1; g <= hoehe - k; g++){
						baum += " ";
					}
					for(int g = 1; g <= 2*k - 1; g++){
						baum += "*";
					}
					for(int g = 1; g <= hoehe - k; g++){
						baum += " ";
					}					
					baum += "\n";
				}				
				for(int k = 0; k < 2; k++){
					for(int g = 1; g < hoehe ; g++){
						baum += " ";
					}					
					baum += "*";					
					for(int g = 1; g < hoehe ; g++){
						baum += " ";
					}
					baum += "\n";	
				}
				System.out.println(baum);
```


Der Variablen 'hoehe' kannst du natürlich auch einen anderen (sinnvollen) Wert zuweisen.


----------



## Mela2080 (28. Dez 2004)

Zu der Klasse Dreieck hät ich folgende Fragen:
Welche Schleife rückt ein, bzw. druckt die Leerzeichen aus, klar logisch im else Zweig, aber wie wird hochgezählt?
Ansich ist die Klasse schon sehr brauchbar, nur müßte sie mehr als zwei Zeilen ausdrucken.
Wenn der Stamm 2 sein soll, dann müßten insgesamt 5 Zeilen rauskommen, und in der untersten Zeilen müßten 9 Sterne zu sehen sein.
Die Aufgabe sieht wie folgt eigentlich aus:
Schreiben Sie ein Hauptprogramm Christbaum, auf der Konsole einen Christbaum mit Wipfel, Ästen und Stamm erzeugt und durch die Stammhöhe parametrisiert ist; dabei ist die Wipfelbreite und von der Stammhöhe folgendermaßen abhängig: wipfelbreite = 4 * stammhöhe + 1. Den Ablauf verdeutlichen folgende Beispiele:
Stammhöhe ?
3




```
*    
   ***   
  *****  
 ******* 
*********
    *    
    *
```

sollte so ungefähr aussehen


----------



## Manfred (29. Dez 2004)

```
public class dreieck
{
    public static void main(String[] args)
    {
        int stammhoehe=5;
        int hoehe=3+2*(stammhoehe-1); 

        for(int zeile=0; zeile<hoehe; zeile++) 
        { 
            for(int spalte=0; spalte<(hoehe*2-1); spalte++) 
            { 
                if(spalte>=(hoehe-zeile-1) && spalte<=(hoehe+zeile-1)) 
                    System.out.print("*"); 
                else 
                    System.out.print(" "); 
            } 
            System.out.println(); 
        }
        
        for(int stamm=0; stamm<stammhoehe; stamm++)
        {
            for(int i=0; i<hoehe-1; i++)
                System.out.print(" ");
            System.out.println("*");
        }  
    }
}
```

Sollte so passen! Nur weiss ich nicht, obs so erwünscht ist!
Denn das Dreieck wird wie oben gezeichnet, nur wird duch die (Folgen-)Formel die Höhe berechnet (3+2*(stammhoehe-1))
Am Schluss wird noch der Stamm gezeichnet!


----------



## Mela2080 (29. Dez 2004)

Danke für die Hilfe, jetzt läufts auch bei mir :applaus:


----------

