# "istWuerfel" Test in einer Geometrie Aufgabe



## nighty86 (25. Mai 2010)

Hallo erstmal an Alle 

Ich hoffe ihr könnt mir hierbei helfen, bin blutiger Java Neuling, und muss hier eine Aufgabe machen. Ich hänge aber grad an der istWuerfel Methode..., und verzweifle langsam...

Also, es ist eine Aufgabe vor allem über Vererbungen und Packages. Ich habe hier jeweils eine Klasse Figur2D und Figur3D, welche dann wiederum jeweils zu verschiedenen Figuren weitervererben ("Ist ein" Beziehung). Außerdem gibt es eine "hat ein" Beziehung zu einem Punkt, welcher jeweils ein Bezugspunkt zu den Figuren ist. Soweit hab ich das nun denk ich implementiert...

Nun muss ich aber bei der Quader Klasse eine Methode basteln, welche testet ob es sich hier um ein Objekt handelt, welches ein Würfel ist.


```
static istWuerfel(Object o) : boolean
```

Und hier hänge ich grad total auf dem Schlauch :-(

Hier mal meine derzeitige Quader Klasse :


```
package geometrie;

public class Quader extends Figur3D
{
   private int hoehe;

   private Rechteck r;


   public Quader(Rechteck r, int hoehe)
   {
      super(r);
      if (hoehe < 1)
         this.hoehe = 1;
      else
         this.hoehe = hoehe;
   }

   public int getHoehe()
   {
      return hoehe;
   }

   public void setHoehe(int hoehe)
   {
      if (hoehe < 1)
         this.hoehe = 1;
      else
         this.hoehe = hoehe;
   }

   public Rechteck getR()
   {
      return r;
   }

   public void setR(Rechteck r)
   {
      this.r = r;
   }

   public double laengeRaumdiagonale()
   {
      Rechteck recht;
      int laenge, breite;
      recht = getBoden();
      laenge = recht.getLaenge();
      breite = recht.getBreite();
      return Math.sqrt(Math.pow(laenge, 2) + Math.pow(breite, 2)
            + Math.pow(hoehe, 2));
   }

   public double oberflaeche()
   {
      Rechteck recht;
      int laenge, breite;
      recht = getBoden();
      laenge = recht.getLaenge();
      breite = recht.getBreite();
      return 2 * laenge * breite + 2 * laenge * hoehe + 2 * breite * hoehe;
   }

   public Rechteck getBoden()
   {
      Figur2D myBoden = super.getBoden();
      return (Rechteck) myBoden;
   }
   
   static public boolean istWuerfel(Object o)
   {
      if (this.volumen() = hoehe*hoehe*hoehe)
       {
           return true;
       }
       else
       {
           return false;
       }
   }


   public double volumen()
   {
      Rechteck recht;
      int laenge, breite;
      recht = getBoden();
      laenge = recht.getLaenge();
      breite = recht.getBreite();
      return laenge * breite * hoehe;
   }

}
```

Danke erstmal im Voraus!!


----------



## Antoras (25. Mai 2010)

Willst du testen ob es sich um ein Würfel mit dem gleichen Volumen handelt, oder ob das Objekt einfach nur ein Würfel ist?

ersteres:

```
if (this.volumen() == hoehe*hoehe*hoehe) return true
```
= ist ein Zuweisungsoperator, der Vergleichsoperator ist ==

letzteres:

```
if (objekt instanceof Würfel) return true
```


----------



## Gast2 (25. Mai 2010)

```
static public boolean istWuerfel(Object o)
   {
      if (this.volumen() = hoehe*hoehe*hoehe)
       {
           return true;
       }
       else
       {
           return false;
       }
   }
```

Der Code sollte dir eigentlich ein paar Fehler werfen.
Ich denke der Sinn dieser Methode wird sein dass du das übergeben Object o darauf testest ob es ein Würfel ist.
Dazu musst du zuerst sicherstellen dass o vom Typ Qauder ist (oder Figur3D, weiß nicht welche 3D Figuren es noch bei dir gibt). Danach kannst du o dann auf Quader casten und dir dessen Höhe und Grundfläche holen. Jetzt noch alle 3 Seiten auf gleichheit testen und fertig


----------



## nighty86 (25. Mai 2010)

Ersteinmal, vielen Danke!!

Ich hab grad folgendes geschrieben bekommen, was ich "rausfinden" soll :



> Nicht ganz. Sie müssen folgendes testen:
> 
> 1. Ist das Objekt ein Quader?
> 2. Ist der Boden ein Quadrat?
> 3. Ist die Quaderhöhe gleich der Quadratseite



Es ist ja eine statische Methode.

```
if (this.volumen() == hoehe*hoehe*hoehe) return true
```
dafür bräuchte ich ja zuerst mal eine statische Referenz, oder?


D.h, für den Anfang muss ich ja mal zuerst testen ob es eine Figur3D ist (hier habe ich nur Quader oder Zylinder). Oder soll ich gleich das instanceof auf Quader testen?

Und für den Rest mache ich es, wie ich es bei der Methode public double laengeRaumdiagonale() gemacht habe? Also, ich caste ja ersteinmal in der Methode "public Rechteck getBoden()". 




```
Rechteck recht;
      int laenge, breite;
      recht = getBoden();
```

Und nun, wie Du schriebst, das Ganze testen?

Danke!!!


----------



## Gast2 (25. Mai 2010)

Ja dann kannste direkt auf Quader testen, ein Zylinder kann ja nie ein Würfel werden 

So wie bei der Methode public double laengeRaumdiagonale() kannst du es gerade nicht machen, da du da auf die Instanzvariablen des objekts zugreifst in dem du dich gerade befindest.
Das ganze geht bei einer Statischen Methode nicht, da musst du die Methoden auf dem Objekt ausführen dass du übergeben bekommst.


----------

