Objektvariable anderer Klasse übernehmen, Getter/Setter

KogoroMori21

Aktives Mitglied
Guten Tag,
ich habe folgendes Problem, ich hab die Klasse Punkt und Linie und möchte die x und y der Klasse Punkt in Klasse Linie aufrufen nur weiß ich leider nicht wie das geht. Hab schon viel probiert und gegoogelt aber finde nicht wirklich was.
Ich kriege in der Klasse Linie bei der public void darstellen bei x und y eine Fehlermeldung: incompatible types: Punkt cannot be converted to int

[CODE lang="java" title="Punkt"]
public class Punkt{

private int x;
private int y;

public Punkt(int x, int y){

this.x = x;
this.y = y;
}

public void setX(int x){
this.x = x;
}

public int getX(){
return x;
}

public void setY(int y){
this.y = y;
}

public int getY(){
return y;
}

public void darstellen(Interaktionsbrett ib){
ib.neueLinie(x,y,x,y);
}





}
[/CODE]


[CODE lang="java" title="Linie"]
public class Linie{

Punkt punkt;
private Punkt x;
private Punkt y;


private int x2;
private int y2;



public Linie(Punkt x, Punkt y){
this.x = x;
this.y = y;
}
/*
public void setX(int x){
this.x = x;
}

public int getX(){
return x;
}

public void setY(int y){
this.y = y;
}

public int getY(){
return y;
}
*/
public void setX2(int x2){
this.x2 = x2;
}

public int getX2(){
return x2;
}

public void setY2(int y2){
this.y2 = y2;
}

public int getY2(){
return y2;
}





public void darstellen(Interaktionsbrett ib){
ib.neueLinie(x,y,x2,y2);
}


}
[/CODE]
 
Einen Punkt x und y zu nennen ist ungünstig und verwirrt dich vermutlich nur, nenne sie eher p1 und p2 oder sowas.
Java:
ib.neueLinie(p1.getX(),p1.getY(),p2.getX(),p2.getY());
 
für die x.getX() und y.getY() funktioniert alles aber für die x2 und Y2 krieg ich fehlermeldungen


[CODE lang="java" title="void darstellen"] ib.neueLinie(x.getX(),y.getY(),x2.getX2(),y2.getY2());[/CODE]

Kann es sein das ich den Code dann so schreiben muss:
[CODE lang="java" title="Neu void darstellen"]ib.neueLinie(x.getX(),y.getY(),x2, y2);[/CODE]

Weil erstens kriege ich so keinen Fehler mehr und die x2 und y2 erstelle ich ja in der Klasse Linie und rufe Sie nicht von der Klasse Punkt auf, wäre das dann so richtig?
 
Was hier gemeint ist, ist eine Gerade - diese ist eine gerade Linie zwischen 2 Punkten. Also benötigst du einen Startpunkt a und einen Endpunkt b. Man würde das etwa so darstellen:
Java:
public class Gerade {

    private final Punkt a;
    private final Punkt b;

    public Gerade(Punkt a, Punkt b) {
        this.a = a;
        this.b = b;
    }

    public Gerade(int x1, int y1, int x2, int y2) {
        this.a = new Punkt(x1, y1);
        this.b = new Punkt(x2, y2);
    }

    public Punkt getA() {
        return a;
    }

    public Punkt getB() {
        return b;
    }

//    public void darstellen(Interaktionsbrett ib){
//        ib.neueLinie(x,y,x2,y2);
//    }

}
Getter und Setter kann man jetzt einfach immer von den jeweiligen Punkten ableiten.

Java:
    public int getX1() {
        return a.getX();
    }
Instanziieren ist kann man das dann so:
Java:
        Punkt a = new Punkt(0, 0);
        Punkt b = new Punkt(10, 10);  
        Gerade g1 = new Gerade(a, b);
        Gerade g2 = new Gerade(0, 0, 10, 10);
Ergänzung: Gerade ist natürlich Quatsch, da Geraden unendlich lang sind. Der Name der Klassen müsste Strecke lauten.
 
Zuletzt bearbeitet:
Kann es sein das ich den Code dann so schreiben muss:
Java:
ib.neueLinie(x.getX(),y.getY(),x2, y2);
Weil erstens kriege ich so keinen Fehler mehr und die x2 und y2 erstelle ich ja in der Klasse Linie und rufe Sie nicht von der Klasse Punkt auf, wäre das dann so richtig?
Genau das meine ich, die Benennung x und y für Punkte verwirrt dich! Mit der aktuellen Benennung müsste es so aussehen
Java:
ib.neueLinie(x.getX(),x.getY(),y.getX(),y.getY());

Ein Punkt ist keine X-Koordinate sondern hat eine X-Koordinate. Gleiches gilt für die Y-Koordinate.
 
Wenn ich mittels getX() und getY() in der Klasse Linie die Punkte der Klasse Punkt aufrufe, dann kriege ich eine NullPointerException und ich verstehe nicht ganz warum. Ich arbeite mit BlueJ. Habe vom Interaktionsbrett und von der Klasse Linie ein neues Objekterzeugt und der Klasse Linie beliebige Werte zugewiesen.
Deshalb versteh ich nicht warum eine NullPointerException kommt
 
Dann zeig uns den konkreten Code, dann kann man da näheres zu sagen. Ansonsten kann man nur sagen: Da rufst Du etwas auf einer Referenz auf, die null ist.
 
Ich würde mal sagen die Klasse Punkt ist richtig. So wurde es zumindest vom Tutor abgenommen.

[CODE lang="java" title="Punkt"]
public class Punkt{

public int x;
public int y;

public Punkt(int x, int y){
this.x = x;
this.y = y;
}

public void setX(int x){
this.x = x;
}

public int getX(){
return x;
}

public void setY(int y){
this.y = y;
}

public int getY(){
return y;
}

public void darstellen(Interaktionsbrett ib){
ib.neuerPunkt(x,y);
}

}

Bei der Klasse Linie habe ich sicherlich einige Fehler, da ich nicht genau weiß wie ich das machen muss. Ich geh davon aus das ich im Konstruktor Fehler habe und in den initiierten Objektvariablen.


[/CODE]

[CODE lang="java" title="Linie"]
public class Linie{

Punkt punkt;
public Punkt x;
public Punkt y;


public int x2;
public int y2;



public Linie(int x, int y, int x2, int y2){
this.x2 = x2;
this.y2 = y2;
}

public void setX2(int x2){
this.x2 = x2;
}

public int getX2(){
return x2;
}

public void setY2(int y2){
this.y2 = y2;
}

public int getY2(){
return y2;
}





public void darstellen(Interaktionsbrett ib){
//ib.neuerPunkt(x.getX(),y.getY());
ib.neueLinie(x.getX(),x.getY(),x2,y2);
}


}
[/CODE]
 
Also eine Linie wird durch zwei Punkte definiert. Jeder Punkt hat x und y.

Daher überleg Dir genau, wie Du die Daten speichern willst, denn das ist so nicht nachvollziehbar:
Java:
    Punkt punkt;
    public Punkt x;
    public Punkt y;
    

    public int x2;
    public int y2;

Was soll punkt sein? x und y sind schlechte Namen, die könnten als p1 und p2 oder startpunkt und endpunkt bezeichnet werden.
x2/y2 können dann weg, da ja die Werte in p2 sein dürften.

Java:
    public Linie(int x, int y, int x2, int y2){
        this.x2 = x2;
        this.y2 = y2;
    }
Hier ignorierst Du x und y. Und es wird kein Punkt initialisiert. Daher sind punkt, x und y schlicht null.

Java:
    public void darstellen(Interaktionsbrett ib){
          //ib.neuerPunkt(x.getX(),y.getY());       
          ib.neueLinie(x.getX(),x.getY(),x2,y2);
    }
Da x null ist, wird hier eine NPE geworfen ... (Es sei denn, Du setzt es von außen - ist halt public!)
 
Nun ich dachte wenn ich "public Punkt x" schreibe, greife ich damit auf den x wert der Klasse Punkt zu.
Und ich setze ja die Werte von außen in dem ich das Objekt erzeuge, falls Sie das meinen aber ich komme leider zu keiner Lösung
 
Das
Java:
public Punkt x;
erstellt eine Instanzvariable x vom Typ Punkt, die von allen Klassen aus zugänglich ist.

Dadurch greifst Du auf nichts innerhalb eines Punktes zu noch erzeugst Du eine Instanz oder sonst irgendwas. Und eine Instanzvariable, die nicht explizit initialisiert ist, ist 0 / false / null (je nach Typ. Da es hier ein Referenztyp ist, ist diese Instanzvariable null).
 
Ein Punkt hat eine x und eine y Koordinate. Typ der Koordinaten: int
Eine Linie hat einen von und einen bis Punkt. Typ der Punkte: Klasse Punkt

Du merkst an dieser Formulierung sicher, dass Implementierung der Klassen Punkt und Linie sich sehr ähneln. Du musst nur die Werte (Namen, Typen etc.) verändern.
 

Neue Themen


Zurück
Oben