# Weihnachtsbaum zeichnen lassen



## Cozumel (21. Dez 2008)

Hallo zusammen, 






Für mögliche Lösungsvorschläge wär ich sehr dankbar ; )


----------



## Guest (21. Dez 2008)

Hi!

Also wir mussten auch einen Weihnachtsbaum zeichnen und zwar mit der paint-Methode. Diese findest du zum Beispiel bei Java ist auch eine Insel unter Punkt 16 Grafikprogrammierung (klick hier)
Bei mir sieht das ungefähr so aus:


```
package Baum;

import java.awt.*; 
import java.awt.event.*; 
 
public class Baum extends Frame 
{ 
  private static final long serialVersionUID = 3800165321162121122L; 
 
  public Baum() 
  { 
    setSize( 900, 700 ); 
 
    addWindowListener( new WindowAdapter() { 
      @Override 
      public void windowClosing ( WindowEvent e ) { System.exit( 0 ); } 
    } ); 
  } 
 
  @Override 
  public void paint( Graphics g ) 
  { 
    //Hier kommt das Gezeichnete hin (mit Pixelangaben)
	//Bsp.: g.drawLine (450, 50, 350, 150);
  } 
 
  public static void main( String[] args ) 
  { 
    new Baum().setVisible( true ); 
  }
}
```

Dazu hab ich aber ne Frage: Warum erkennt Eclipse bei mir das "@Override" nicht? Er unterkringelt es rot und sagt "Override cannot be resolved as a type"... Wenn ich es weglasse, findet er die Main-Class nicht mehr. Das geht also auch nicht...

Gruß,
Daniel


----------



## Marco13 (21. Dez 2008)

@Gast: Das nennt man "Hijacking". Mach' deinen eigenen Thread auf.

@Cozumel: Man müßte genau wissen, wie die Breite das Aussehen des Baumes beeinflussen soll. Gibt's dazu Infos oder Beispiele?


----------



## Cozumel (21. Dez 2008)

@Marco13

Die Breite soll die letzte Stufe des Baumes angeben


----------



## hdi (21. Dez 2008)

Du meinst wieviele "*" die unterste Reihe haben soll? 
Dann musst du dir das Verhältnis zwischen Höhe und Breite holen:


```
double ratio = breite/hoehe;
```

und dann erzeugst du in einer for-schleife Reihe für Reihe deinen Baum, wobei
in jeder Reihe dann


```
int amountStars = reihenIndex * ratio;
```

Sterne vorkommen.

Als letztes solltest du aber noch sicherstellen, dass zumindest immer ein einziger * pro Reihe
vorhanden ist, auch wenn amountStars = 0 ist. Damit die Höhe garantiert ist, denn wenn man die Variablen
dumm wählt, zB Breite = 1 und Höhe = 2, dann haste ohne diese Abfrage ein Problem (wobei der Baum dann so oder so scheisse aussieht )


----------



## Cozumel (21. Dez 2008)

Hi hdi,

so richtig hab ich das noch nicht verstanden, wie ich das in meinen Code einbauen soll.



bei 

```
int amountStars = reihenIndex * ratio;
```
muss ich einen cast nach int machen oder?


----------



## hdi (21. Dez 2008)

Genau das musst du casten. Das Problem ist jetzt noch:


```
for (int j = 1; j <= high - i; j++)
```

stimmt natürlcih nicht mehr so ohne weiteres, weil der Baum nicht unbedingt
gleichmässig diagonal kleiner wird nach oben hin. D.h. konkret musst du das *high - i*
ersetzen. Musst dir halt überlegen, wovon jetzt die Einrückung abhängt, du hast die 
Anzahl der Sterne und die Breite sowie "i", d.h. damit solltest du das hinkriegen.

Und nochmal: 

```
for (int j = 1; j <= amountStars; j++)
```

ist auch nicht gut da amountStars auch 0 sein kann. Du solltest in jedem Fall mindestens
immer 1 Stern pro Reihe printen.


----------



## Cozumel (21. Dez 2008)

Ich bins nochmal...

also jetzt bekomm ich so nen halben baum hin...  irgendwie stell ich mich bei der aufgabe schon ziemlich an - aber wir sind ja im Anfängerforum ^^



ist gerade etwas verwirrend, aber wie schaff ich es, dass er an die richtige Stelle rückt?


----------



## Marco13 (22. Dez 2008)

Hm. Für width=10 und height=15 sieht das aber ziemlich seltsam aus... 

Deswegen die Frage: Wie soll das ganze dann aussehen? Mal' ggf. mal auf, wie ein Baum für
width = 5, height = 7
width = 6, height = 10
aussehen soll....


----------



## Gast (22. Dez 2008)

sieht nicht generell jede "gerade" Basis doof aus? Also irgendwie muss es doch eine ungerade Zahl sein, damit man eine schöne Spitze bekommt.


----------



## Marco13 (22. Dez 2008)

:wink: Die Zahlen die ich vorgegeben habe (bzw. bestimmte Eigenschaften, die für diese Zahlen bzw. Zahlenpaare gelten) waren bewußt gewählt :wink: Um zu wissen, WIE man ein Problem löst, muss man das Problem im allgemeinen kennen....


----------

