[Greenfoot] Zugriff auf Subclass von Actor in Subclass von World

Domi741

Mitglied
Hallo,

ich habe hier in der Klasse "Actor" eine Subklasse "Walk" sowie eine Subklasse "City" in der Klasse "World".

Nun möchte ich in der Subklasse "City" auf die Subklasse "Walk" zugreifen, genauer gesagt auf die Methoden "getXPos()" und "getYPos()".

Wie kann ich das realisieren?

Lg Dominic
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Nun möchte ich in der Subklasse "City" auf die Subklasse "Walk" zugreifen, genauer gesagt auf die Methoden "getXPos()" und "getYPos()".
Ich nehme mal an es geht hier nicht um die Klassen sondern die daraus gebildeten Objekte:
Ganz allgemein muss das Objekt vom Typ City eine Referenz auf das Objekt vom Typ Walk besitzen. Diese Referenz könnte von einem anderen Objekt/ einer anderen Klasse die beide Objekte kennt übergeben werden.
 

Domi741

Mitglied
Ich nehme mal an es geht hier nicht um die Klassen sondern die daraus gebildeten Objekte:
Ja sry, das meinte ich ;)

Ganz allgemein muss das Objekt vom Typ City eine Referenz auf das Objekt vom Typ Walk besitzen. Diese Referenz könnte von einem anderen Objekt/ einer anderen Klasse die beide Objekte kennt übergeben werden.
Das kriege ich ja eben nicht hin habe in der Klasse City oben wo ich die Variablen initialisiere folgendes hingeschrieben:
Java:
private Walk walkObject;

Wenn ich nun in der Methode, von der Klasse City, auf die "getXPos()" bzw. auf die "getYPos()" zugreifen möchte funktioniert das nicht. Habe es wie folgt versucht:

Java:
int x = walkObject.getXPos();
int y = walkObject.getYPos();

was ist daran falsch? =/
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Gibt es denn eine Klasse/Objekt die beide Objekte kennt?
Wenn City z.B. folgende Methode hätte:
Java:
public void setWalk(Walk walk) {
    walkObject = walk;
}
Könnte diese Klasse die Referenz auf das Walk Objekt übergeben.
 

Domi741

Mitglied
Verstehe nicht wie du das meinst, Michael. =/

Vielleicht sollte ich dazu sagen, dass ich mich damit noch nicht solange auseinander setze. Allerdings aufgrund von PHP-Kenntnissen und ein wenig C#, doch einigermaßen vorankomme.

Hier mal ein Ausschnitt auf der Klasse City:
Java:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class City extends World
{
    private Walk walkObject;
   
    /**
     * Erzeugt 'anzahl' an Frauen und fügt sie an zufälligen Positionen in der Welt ein.
     */
    private void addFrauen(int anzahl) {
        for(int i=1;i<=anzahl;i++) {
            int x = walkObject.getXPos();
            int y = walkObject.getYPos();
            
            addObject(new Frau(), x, y);
        }
    }
}

Und hier ein Ausschnitt aus der Klasse "Walk":
Java:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class Walk extends Actor
{
    /**
     * Generiert eine X-Koordinate
     */
    public int getXPos()
    {
        World myWorld = getWorld();
        int x = Greenfoot.getRandomNumber(myWorld.getWidth());
    
        if(x < 21) {
            x = 21;
        }
        if(x >= myWorld.getWidth()-21) {
            x = myWorld.getWidth()-21;
        }
        
        return x;
    }
    
    /**
     * Generiert eine Y-Koordinate
     */
    public int getYPos()
    {
        World myWorld = getWorld();
        int y = Greenfoot.getRandomNumber(myWorld.getHeight());        
       
        if(y < 21) {
            y = 21;
        }
        if(y >= myWorld.getHeight()-21) {
            y = myWorld.getHeight()-21;
        }
        
        return y;
    }
}

Die Methode "getWorld()" gibt eine Referenz auf das World-Objekt zurück.

Vielleicht hilft das ein wenig?!


Lg
 

Michael...

Top Contributor
Kenne greenwood und die Zusammenhänge nicht.
Wo wird denn eine City Objekt und ein Walk Objekt erzeugt? Eventuell kann man das Walk Objekt in City neu erzeugen.
 

Domi741

Mitglied
Also bei Greenfoot gibt es Klassen die vordefiniert sind, u.a. World und Actor.

Von diesen Klassen werden Subklassen abgeleitet mit welchen dann Interagiert wird (ich hoffe so kann man das sagen).

Die Klasse City ist bei mir eine Subklasse von World, die Klasse Walk ist eine Subklasse von Actor.

Vielleicht hilft es dir wenn du hier einmal kurz überfliegst was World und Actor genau ist. Kann das leider net so gut erklären =/

Aber trotzdem Danke für deine Mühe =)

Lg
 
G

guest0815

Gast
Wie du selbst schreibst, sind das vordefinierte Klassen. Von Instanzenbildung ist in deinem Quelltext aber noch nichts zu sehen.
 
G

guest0815

Gast
Wie bitte?

Diese Quellcode-Zeile hast du bis jetzt noch mit keinem Wort erwähnt. Oben stand klipp und klar nur
Java:
private Walk walkObject;
Und das ist schlicht und ergreifend nur die Deklaration einer Referenz und keine Instanziierung.

Und was soll an
Java:
private Walk walkObject = new Walk();
nun nicht funktionieren?

Wenn du Hilfe erwartest solltest du schon mal konkrete Fehlermeldungen rüberbringen.
 

Domi741

Mitglied
du kommst ehrlich gesagt ziemlich unfreundlich rüber... aber OK.
Ja ich weiß, ich benötige Hilfe, aber trotzdem kann man da ja trotzdem eine gewisse freundlichkeit an den Tag bringen...


habe oben das "= new Walk()" weggelassen wegen der Fehlermeldung!

nun habe ich es wieder eingefügt nun sieht das ganze wie folgt aus:

Java:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class City extends World
{
    private Walk walkObject = new Walk();

    /**
     * Erzeugt 'anzahl' an Frauen und fügt sie an zufälligen Positionen in der Welt ein.
     */
    private void addFrauen(int anzahl) {
        for(int i=1;i<=anzahl;i++) {
            int x = walkObject.getXPos();
            int y = walkObject.getYPos();
                        
            addObject(new Frau(), x, y);
        }
    }
}

Als Fehlermeldung erhalte ich dann folgendes:
Code:
java.lang.NullPointerException
	at City.addFrauen(City.java:39)
	at City.<init>(City.java:27)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
	at greenfoot.core.Simulation.newInstance(Simulation.java:520)
	at greenfoot.platforms.ide.WorldHandlerDelegateIDE$3.run(WorldHandlerDelegateIDE.java:406)
	at greenfoot.core.Simulation.runQueuedTasks(Simulation.java:411)
	at greenfoot.core.Simulation.maybePause(Simulation.java:269)
	at greenfoot.core.Simulation.runContent(Simulation.java:201)
	at greenfoot.core.Simulation.run(Simulation.java:194)
java.lang.NullPointerException
	at Walk.getYPos(Walk.java:66)
	at City.addFrauen(City.java:40)
	at City.<init>(City.java:27)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
	at greenfoot.core.Simulation.newInstance(Simulation.java:520)
	at greenfoot.platforms.ide.WorldHandlerDelegateIDE$3.run(WorldHandlerDelegateIDE.java:406)
	at greenfoot.core.Simulation.runQueuedTasks(Simulation.java:411)
	at greenfoot.core.Simulation.maybePause(Simulation.java:269)
	at greenfoot.core.Simulation.runContent(Simulation.java:201)
	at greenfoot.core.Simulation.run(Simulation.java:194)

Lg
 

Michael...

Top Contributor
Der Sinn der Klasse Walk ist mir nicht ganz klar.
Logisch wäre für mich wenn Frau von Actor erbt und City mehrere Frau Objekt erzeugt per setLocation deren Position gesetzt wird. Was da Walk zu tun hat - da es ja scheinbar nur zum generieren zufälliger Positionen genutzt wird - habe ich nicht verstanden.
 

Domi741

Mitglied
Der Sinn der Klasse Walk ist mir nicht ganz klar.
Logisch wäre für mich wenn Frau von Actor erbt und City mehrere Frau Objekt erzeugt per setLocation deren Position gesetzt wird. Was da Walk zu tun hat - da es ja scheinbar nur zum generieren zufälliger Positionen genutzt wird - habe ich nicht verstanden.

In Walk sind noch weitere Methoden definiert, unter anderem wie sich die Frau und noch weitere Elemente auf der Welt bewegen. Die Elemente (Frau, Mann, u.a.) werden alle als Subklassen von der Walk Klasse abgeleitet. Nur weil sie an sich mit meinem Problem nix zu tun haben, habe ich das hier weggelassen. =)
 
G

guest0815

Gast
du kommst ehrlich gesagt ziemlich unfreundlich rüber... aber OK.
Ja ich weiß, ich benötige Hilfe, aber trotzdem kann man da ja trotzdem eine gewisse freundlichkeit an den Tag bringen...
Ich bin nicht unfreundlich, sondern höchstens direkt.
habe oben das "= new Walk()" weggelassen wegen der Fehlermeldung!
Und scheinbar hast du noch diverses anderes einfach weggelassen.
Allein schon aus den Zeilennummern der Fehlermeldung und der Tatsache, dass World nur diese Konstruktoren hat World (Greenfoot API)
folgt, dass da wohl noch einiges fehlt. Sonst wäre das überhaupt nicht kompilierbar.

Also noch mal: Wenn du Hilfe willst, dann poste die gesamte Klasse!
 

Domi741

Mitglied
Java:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * City: Basisklasse für das Erzeugen der Welt.
 * 
 * @author möp
 * @version 2012-12-20
 */
public class City extends World
{
    private Walk walkObject = new Walk();
    
    /**
     * Constructor for objects of class City.
     */
    public City()
    {    
        
        // Create a new world with 700x600 cells with a cell size of 1x1 pixels.
        super(700, 600, 1); 
        setBackground("hintergrund.jpg");
        
        addXYZ(1);
        addZXY(10);
        addXZY(2);
        
        addFrauen(4);
        addMaenner(4);
        
        
    }
    
   
    /**
     * Erzeugt 'anzahl' an Frauen und fügt sie an zufälligen Positionen in der Welt ein.
     */
    private void addFrauen(int anzahl) {
        for(int i=1;i<=anzahl;i++) {
            int x = walkObject.getXPos();
            int y = walkObject.getYPos();
                        
            addObject(new Frau(), x, y);
        }
    }

     /**
     * Erzeugt 'anzahl' an Männern und fügt sie an zufälligen Positionen in der Welt ein.
     */
    private void addMaenner(int anzahl) {
        for(int i=1;i<=anzahl;i++) {
            int x = Greenfoot.getRandomNumber(getWidth());
            int y = Greenfoot.getRandomNumber(getHeight());
            
            if(x < 21) {
                x = 21;
            }
            if(x >= getWidth()-21) {
                x = getWidth()-21;
            }
            if(y < 21) {
                y = 21;
            }
            if(y >= getHeight()-21) {
                y = getHeight()-21;
            }
            
            addObject(new Mann(), x, y);
        }
    }


    [....]
}

an der Stelle "[....]" habe ich die Methoden "addXYZ()", "addZXY()" und "addXZY()".

Im Prinzip sind die 3 nur Kopien, von addMaenner, nur das ein anderes Objekt in die Welt gesetzt wird. und das hat nix mit dem Problem an sich zu tun. ich möchte halt einfach die x und y Koordinate mit meinen 2 Methoden die ich bereits in einer anderen Klasse deklariert habe bestimmen. Die beiden Methoden sind in der Walk Klasse deklariert, weil in Unterklassen auch auf die beiden Methoden zugreife und mir einfach das neu deklarieren ersparen wollte.


// EDIT

ich glaube ich hab den Fehler gefunden, die Methoden getYPos und getXPos, greifen mit der methode getWorld auf eine Referenz der World zurück. Könnte es sein dass sich die beiden da blockieren? und dadurch die fehler entstehen?

Werde glaub ich einfach die Methoden getXPos und getYPos nochmal in City deklarieren dann sollte das problem behoben sein, dann könnte ich ja vllt umgekehrt auf die Methoden zugreifen.
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Muss City nicht im Konstruktor erst das walkObjekt per addObjekt "in sich aufnehmen"? Sonst fehlt dem walkObjekt der World Kontext - wenn ich das richtig deute.
 

Domi741

Mitglied
@Michael: siehe Edit vom Vorpost ;)

und dann noch aktueller Stand:

Habe nun einfach in beiden Klassen die Methoden deklariert und es funktioniert. es spart trotzdem noch einige zeilen Code ein :)

Aber trotzdem danke für die Hilfe. =)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
Pinhg Sound in Greenfoot Code einbinden Java Basics - Anfänger-Themen 2
M Greenfoot World und Actor Quellcode Java Basics - Anfänger-Themen 13
D incompatible Types Problem in Greenfoot Java Basics - Anfänger-Themen 5
W Schleifen bei Greenfoot Java Basics - Anfänger-Themen 4
Z Greenfoot Variable in einer Datei und nicht in einem Objekt/World speichern Java Basics - Anfänger-Themen 1
A Greenfoot - Objekt im Vordergrund lassen, bei einer scrollbaren Welt ohne zentrierten Actor Java Basics - Anfänger-Themen 3
C Greenfoot: Bei Tastendruck und best. Wert Bild ändern Java Basics - Anfänger-Themen 2
B Hilfe bei Greenfoot ( random blickrichtung + vor(); Java Basics - Anfänger-Themen 10
BlueFox Greenfoot wait() Java Basics - Anfänger-Themen 10
V [Greenfoot] java.lang.NullPointerException Java Basics - Anfänger-Themen 12
T Wegberechnung mit Greenfoot Java Basics - Anfänger-Themen 10
B Erste Schritte Generelle Fragen zu Java / Greenfoot. Java Basics - Anfänger-Themen 8
Q Greenfoot: Art Mario programmieren Java Basics - Anfänger-Themen 7
K Problem mit Greenfoot - aussetzen modellieren? Java Basics - Anfänger-Themen 2
G [Greenfoot] Zeitverzögerung Java Basics - Anfänger-Themen 11
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
H Zugriff verweigert Java Basics - Anfänger-Themen 5
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
L Methoden Zugriff <identifier> expected Java Basics - Anfänger-Themen 13
T Java - Zugriff nur mit CLASSPATH ? Java Basics - Anfänger-Themen 7
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
H Datentypen ArrayList in ArrayList: Zugriff Java Basics - Anfänger-Themen 6
J get methoden zugriff und objekt erzeugung Java Basics - Anfänger-Themen 30
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
T Zugriff auf JCheckBox Java Basics - Anfänger-Themen 8
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
S Vererbung Zugriff auf die Basisklasse einer "zweiten" Erweiterungsklasse Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
G Wieviel kostet der Zugriff auf Objektattribute im Vergleich zur Erstellung von vars in Methode? Java Basics - Anfänger-Themen 11
L Zugriff auf zwei Java-Quellcodes Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
J JDialog Zugriff auf parent JDialog Java Basics - Anfänger-Themen 5
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
F Zugriff auf Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
J Erste Schritte Zugriff auf Eigenschaft Java Basics - Anfänger-Themen 2
M MVC - Problem mit Zugriff auf Objekt Java Basics - Anfänger-Themen 4
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
C 5 - Zugriff verweigert Java Basics - Anfänger-Themen 1
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
Z Zugriff auf Pakete Java Basics - Anfänger-Themen 5
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
W OOP Zugriff auf mit Objekt erstellte Struktur Java Basics - Anfänger-Themen 7
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
B Klassen Zugriff auf Daten der Child-Klasse Java Basics - Anfänger-Themen 9
W Typisierte ArrayList und der Zugriff auf den Typ Java Basics - Anfänger-Themen 5
M Zugriff auf Klasse Java Basics - Anfänger-Themen 2
K Zugriff auf C: Java Basics - Anfänger-Themen 5
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
N Zugriff bei Package Struktur Java Basics - Anfänger-Themen 6
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben