# Java Tannenbaum *Argh*



## Newtronic (8. Sep 2005)

Hallo Leute,

muss auf Montag einen Java Tannenbaum programmieren. Die Höhe und die Breite soll man variabel eingeben können und als ausgabe soll der Tannenbaum im Sternchenformat erscheinen, also mit denen: *

Habt ihr ne idee? Bin der totale javaloser habe echt keine Ahnung von der Materie.


----------



## KSG9|sebastian (8. Sep 2005)

mir rekursion....

so kann der baum aussehen

     *************
   *                        *
 ******************
   *                        *
*                              *
********************

Zumindest so ähnlich^^


Vorgehensweise:

Du schreibst dir ne Funktion, welche dir den unteren Teil vom tannenbaum zeichen, also das
  **
 *  * 
*****

Die funktion baust du dann so um, dass du etwas übergibst, musst du dir überlegen wie du es machen willst. Dann rufst du die Funktion immer wieder selber auf, bis irgendein punkt erreicht ist.

Ich würde z.B. die anzahl der Leerzeichen und evtl. anzahl Sterne übergeben (muss aber net sein), welche hinkommen.

Erster Aufruf: 0 Leerstellen, 20 Sterne, da unten
Zweiter Aufruf: 2 Leerstellen, 16 Sterne, d.: vorne 2 eingerückt, hinten 2 kürzer
Dritter Aufruf: 4 Leerstellen, 12 Sterne, 

u.s.w.


Edit: einrücken kaputt ;D


----------



## milahu (8. Sep 2005)

wie willste da rekursion anwenden 
habs so gelöst:

```
public class tannenbaum {
	public static void main (String args[]){
		int hoehe = (args.length < 1) ? 10 : Integer.parseInt(args[0]);
		int breite = (args.length < 2) ? 10 : Integer.parseInt(args[1]);
		
		String ebene;
		
		for(int hoehe_c = 1; hoehe_c <= hoehe; hoehe_c++){
			ebene = "";
			for(int breite_c = (int)((float)breite*((float)hoehe_c/(float)hoehe)); breite_c >= 1; breite_c--){
				ebene = ebene.concat("*");
			}
			while(ebene.length() < breite){
				ebene = " "+ebene+" ";
			}
			System.out.println(ebene);
		}
	}
}
```


----------



## KSG9|sebastian (9. Sep 2005)

so wie ich es geschrieben hab..

ein tannenbaum besteht immer aus den selben elementen...
nur dass es nach obenhin schmäler wird

ist zwar ein unschöner baum, aber es IST einer ;D


----------



## norman (9. Sep 2005)

denke das ist prinzipiell etwas leichter nachzuvollziehen:


```
public class tannenbaum {
	public static void main(String args[]) {
		
		int hoehe=20;	//vom user einlesen lassen
		int breite=30;
		
		//ausgabe zentrieren
		
		for (int i=0; i<hoehe; i++) {                         //zeichnet soviele zeilen von ** wie hoehe
			   
			 for (int j=breite-i; j<=breite;j++) {     //setzt in jede zeile zunehmende anzahl von ** 
			       System.out.print("*");
			  }
			 System.out.println();                          //Zeilenumbruch
		}		

		//noch einen Stamm zeichen
	}
}
```


----------



## helfer (7. Dez 2007)

Falls mal jemand einen schönen Baum haben will:


```
/**
 * @author jensa
 * 
 */
public class TannenbaumZeichnen_normal {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i, j;
		int hoehe;
		// Kanal für Daten von Tastatur
	//	Scanner scan = new Scanner(System.in);
		System.out.println("TannenbaumZeichnen");
		System.out.println("-------------------");
		//System.out.print("Bitte geben sie die Höhe (exkl. Stamm) ein: ");

		//hoehe = Integer.parseInt(scan.next());
		hoehe=9;

		for (i = 1; i <= hoehe; i++) {

			for (j = 1; j <= hoehe - i; j++)
				System.out.print(" ");

			for (j = 1; j <= (2 * i - 1); j++)
				System.out.print("*");

			System.out.println();
		}

		// noch "Stamm" einzeichnen
		for (i = 1; i < hoehe; i++)
			System.out.print(" ");
		System.out.println("I");
		for (i = 1; i < hoehe; i++)
		System.out.print(" ");
		System.out.println("I");
	}

}
```


hatte gerad lust das mal zu schreiben.


----------



## NoXiD (8. Dez 2007)

```
public class Weihnachtsbaum
 {
 	public static void main (String[]args)
 	{
 		int aZ,aS,heighTree,heighBark,widthBark,h,h2,h3,aSbackup;
 		aZ=4;
 		aS=9;
 		heighTree=7;
 		heighBark=2;
 		widthBark=3;
 		h=1;
 		h2=1;
 		h3=1;
 		aSbackup=aS;
 		
 		while(h<aZ){
 			System.out.println();
 			h=h+1;
 		}
 		h=1;									//in die Zeilen Rücken
 		
 		while(h<aS){
 			System.out.print(" ");
 			h=h+1;
 		}
 		
 		h=1;
 		while((heighTree-heighBark)>=h2){
 			
 			while(h<=h3){ 						//* Zeichnen
 				System.out.print("*");
 				h=h+1;	
 				
 			}
 			System.out.println();
 			h=1;
 			aS=aS-1;
 			
 			if(h2!=heighTree-heighBark){
 			while(h<aS){		 			//Abstand von links wird immer um 1 weniger
 				System.out.print(" ");
 				h=h+1;
 			}
 			}
 			
 			h2=h2+1;
 			h3=h3+2;
 			h=1;
 		}
 		
 		h=1;
 		h2=1;
 		h3=1;
 		
 		while(h<=heighBark){
 			while(h2<=aSbackup-2){
 				System.out.print(" ");			//Anfang vom Stamm berechnen und einrücken 
 				h2=h2+1;
 			}
 			while(h3<=widthBark){
 				System.out.print("*");			//Stamm zeichnen
 				h3=h3+1;
 			}
 			System.out.println();
 			h=h+1;
 			h2=1;
 			h3=1;

 		}
 	}
 }
```


war ca 30 min arbeit =)   ich finde ihn schick xD

greeeZ   :wink:


----------

