Announcement

Collapse
No announcement yet.

Problem mit verschiedenen Klassen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit verschiedenen Klassen

    Ich habe mal wieder ein problem mit einem Programm, scheint an meinem Programmierstil zu liegen, da ich ständig solche ähnlichen Probleme habe, aber da ich keine Lust habe die beiden Klassen wieder einzustampfen und alles im Hauptprogramm zu rechnen schildere ich euch hier mein problem.

    Ich habe eine Klasse Dot und eine Klasse Gerade,
    in der Klasse Dot existiert folgende Funktion:
    <PRE>
    public boolean istInDreieck(Dot p1, Dot p2, Dot p3) {
    [...]
    Gerade g1 = new Gerade (p2,p3);
    Gerade g2 = new Gerade (p1,this);
    Dot sp = new Dot(g1.getSchnittX(g2),g1.getSchnittY(g2));
    //Dot sp = new Dot();
    //sp = g1.getSchnittpunkt(g2);(alternativ dies, aber funktioniert nicht, siehe weiter unten)
    [...]
    }
    </PRE>

    dies sind die Konstruktoren:
    <PRE>
    private int xi, yi;
    private double xd, yd;
    public Dot() {
    xi = 0;
    yi = 0;
    }
    public Dot(int x, int y) {
    xi = x;
    yi = y;
    }
    public Dot(double x, double y) {
    double xd = x;
    double yd = y;
    }
    </PRE>

    Die Klasse Gerade beinhaltet die Funktion:
    <PRE>

    public Dot getSchnittpunkt(Gerade g){
    double schnittX = (g.getN() - this.getN()) / (this.getM() - g.getM());
    double schnittY = g.getM() * schnittX + g.getN();
    Dot erg = new Dot(schnittX, schnittY);
    return erg;
    }
    </PRE>

    diese Funktion funktioniert nicht erg ist immer (0,0) obwohl schnittX und schnittY existieren :-(
    daher gibt es noch diese beiden funktionen die klappen:
    <PRE>
    public double getSchnittX(Gerade g){}

    public double getSchnittY(Gerade g){}
    </PRE>

    Wenn ich nun die Funktion istInDreieck in meinem Hauptprogramm verwende kommt immer Müll heraus, da "sp" immer (0,0) ist.
    Wie kann ich das beheben?

    Vielen Dank, Wizard of War

  • #2
    Hi Wizard_of_War,

    deine Dot-Klasse beinhaltet redundante Daten. Sie hat die Koordinaten einmal als Integer-Werte und einmal als Double-Werte. Für beide gibt es einen separaten Konstruktor.

    In deiner Methode

    public Dot getSchnittpunkt(Gerade g)

    erzeugst du ein Dot.Objekt über den Konstruktor, der die Double-Koordinaten setzt. Aus der Tatsache, dass du dich beklagst, dass das Ergebnis immer (0,0) wäre, schliesse ich, dass du dort die Integer-Koordinaten des Dot-Objektes ausgibst. Diese wurden in diesem Dot-Objekt aber nie gesetzt.

    Die Lösung ist ganz einfach die: Das Dot-Objekt hat nur Double-Koordinaten und wenn du die Koordinaten nur als Integer-Werte benötigst, dann werden die Double-Werte eben in Integer gerundet. (Entweder durch Abschneiden oder Runden, je nach belieben.)

    Gruß

    Wolfgan

    Comment


    • #3
      Vielen Dank für die Antwort, ich hab die Lösung selbst gefunden, sie waren nah dran ;-)

      An den get.Methoden lags nicht, ich hatte eine für Integer getX() und eine für double getXd().

      Es lag (was für ein dummer, dummer Fehler) am Konstruktor!

      Die Variablen xd und yd wurden je einmal global und dann noch einmal lokal definiert, da kann natürlich ausserhalb des Konstruktors nichts anderes mehr da sein als 0,0.

      Aber irgendwie hat mich selbst Eclipse net gewarnt, daß ich die 2 mal definiert habe.

      Vielen Dank nochmal, ich hatte die Hoffnung auf dieses Forum schon aufgegeben...

      Wi

      Comment

      Working...
      X