benötige Eure Hilfe. Möchte mit einer Methode die Koordinaten eines Objektes (Klasse Point) verändern. Folgender Code:
import java.awt.Point;
public class Zeiger
{
void shift( int a, int b )
{
this . x = x + a;
this . y = y + b;
}
public static void main( String[] args )
{
java.awt.Point p = new java.awt.Point( 2, 2 );
System.out.println( p );
p.shift( 2, 2 );
System.out.println( p );
}
}
bekomme folgende Fehlermeldungen:
mac-air:Tutorial user$ javac Zeiger.java
Zeiger.java:8: error: cannot find symbol
this . x = x + a;
^
symbol: variable x
Zeiger.java:8: error: cannot find symbol
this . x = x + a;
^
symbol: variable x
location: class Zeiger
Zeiger.java:9: error: cannot find symbol
this . y = y + b;
^
symbol: variable y
Zeiger.java:9: error: cannot find symbol
this . y = y + b;
^
symbol: variable y
location: class Zeiger
Zeiger.java:19: error: cannot find symbol
p.shift( 2, 2 );
^
symbol: method shift(int,int)
location: variable p of type Point
5 errors
“this” bezieht sich auf die Klasse Zeiger, die aber keine Felder x und y kennt.
Entsprechende Felder zu erzeugen würde dir aber auch nicht helfen, denk ich.
Es scheint ja, als wolltest du das Point-Objekt verändern, aber woher soll den die shift-Methode der Klasse Zeiger wissen,
dass du in der Main-Methode ein Point-Objekt erzeugt hast, das du gerne verschoben haben möchtest.
Die Hellseher-Funktion fehlt in den meissten Programmiersprachen.
Nenne das bitte nicht Zeiger sondern Punkt.
Überlege dir, ob du von java.awt.Point ableiten möchtest (also Point erweitern möchtest).
Wenn nicht, deklariere, definiere und initialisiere: private int x = 0; und private int y = 0; in Punkt.
Verwende bitte einfach [ JAVA ] [ … ] [ /JAVA ]-Tags.
[QUOTE=pappawinni]“this” bezieht sich auf die Klasse Zeiger, die aber keine Felder x und y kennt.
Entsprechende Felder zu erzeugen würde dir aber auch nicht helfen, denk ich.
Es scheint ja, als wolltest du das Point-Objekt verändern, aber woher soll den die shift-Methode der Klasse Zeiger wissen,
dass du in der Main-Methode ein Point-Objekt erzeugt hast, das du gerne verschoben haben möchtest.
Die Hellseher-Funktion fehlt in den meissten Programmiersprachen.[/QUOTE]
OK Danke, wie stelle ich denn den Bezug zwischen der Methode shift und dem Objekt p in der main Methode her ?
Ziel ist den Punkt um bestimmte Koordinaten zu verschieben, also nicht per .move oder .setLocation, sondern mit einer selbst geschriebenen Methode.
kannst Du bitte auf meinen Code bezogen schreiben, wie Du die Methode shift gestalten würdest ?
Ich dachte ich erschaffe erst die Signatur der Methode in der Klasse Zeiger, und rufe sie dann auf dem Objekt p ab, wobei die Methode shift dann auf die Attribute x und y von dem Objekt p zugreift und die Parameter a und b dazu addiert, und somit die Koordinaten des Punktes verändert, doch irgendwo habe ich einen Denkfehler.
public class Zeiger extends java.awt.Point
{
public Zeiger(int a, int b){
super(a,b);
}
void shift( int a, int b )
{
this . x = x + a;
this . y = y + b;
}
public static void main( String[] args )
{
Zeiger p = new Zeiger(2,2);
System.out.println( p );
p.shift( 2, 2 );
System.out.println( p );
p.translate( 1, 3 );
System.out.println( p );
}
}```
wie wäre es, mit einem Lehrbuch alle 300 Begriffe/ sonstigen elementaren Grundlagen Seite für Seite der Reihe nach zu erarbeiten,
statt alles irgendwo einzeln nachzufragen, teils Stunden zu warten?
ansonsten gehen auch immer Suchmaschinen:
‘java class extends’
‘java constructor super’
es muss immer jemanden geben, der kontraproduktive Bemerkungen macht, die einen null weiterbringen. Wäre auch langweilig, wenn alle gleich wären. Ich lerne Java aus dem Buch Java ist eine Insel, und habe vielleicht noch nicht die Stelle wo diese Sachen erklärt werden erreicht. Übrigens warte ich nicht Stundenlang, sondern muss zwischendurch auch noch arbeiten. Jetzt werde ich die Sachen googeln, da ich gerade in der Mittagspause.
Trotzdem Danke
Da jetzt nix mehr gekommen ist, kann man annehmen dass du das Problem gefunden hast. Für alle Fälle: In Java musst du Variablen deklarieren. Das heisst, du sagst irgendwo ein Objekt der Klasse Punkt hat eine x und eine y Koordinate in der Form eines Integer (Ganzzzahl). Das hast du aber nicht gemacht, drum weis der Computer nicht was mit x bzw. y gemeint ist.
{
int x,y;
public Punkt(int x, int y)
{
thix.x = x;
this.y = y;
}
public void shift( int a, int b )
{
this . x = x + a;
this . y = y + b;
}
public static void main( String[] args )
{
Punkt p = new Punkt( 2, 2 );
System.out.println( p );
p.shift( 2, 2 );
System.out.println( p );
}
}```
Und Instanzvariablen, in diesem Fall also x und y vom Typ int, sollten immer private deklariert werden.
Kommt dann sicher noch in deinem Buch unter Sichtbarkeit von Variablen. Spätestens, wenn es um Kapselung geht.
[QUOTE=L-ectron-X]Und Instanzvariablen, in diesem Fall also x und y vom Typ int, sollten immer private deklariert werden.
[/QUOTE]
interessant ist dazu, dass hier im Thread auch schon von Point-Klasse geerbt und dabei auf x/ y direkt zugegriffen wird, Variablen dort public,
wären sie dort private, was auch ginge, dann bei Erben auf Methoden angewiesen, getX(), getY(), setLocation() bzw. move()
Jetzt wurde alles gesagt, aber wichtig ist noch eine Stelle: this . x = x + a;
wenn a heißt x (wenn a x heißt), dann besser so: this . x = this.x + a;
oder this . x = this.x + x;.
this(.) bezieht sich auf das aktuelle Objekt der Klasse… …
muss mich noch mal melden, bekomme folgende Ausgabe:
Punkte@7f31245a
Punkte@7f31245a
hätte eigentlich die Koordinaten erwartet. Hier der Code:
public class Punkte
{
int x, y;
public Punkte(int x, int y)
{
this.x = x;
this.y = y;
}
public void shift( int a, int b )
{
this.x = x + a;
this.y = y + b;
}
public static void main( String[] args )
{
Punkte p = new Punkte( 2, 2 );
System.out.println( p );
p.shift( 2, 2 );
System.out.println( p );
}
}