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);
}
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:
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?
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);
}
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;publicPunkt x;publicPunkt y;publicint x2;publicint 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.
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
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.