Attribute eines anderen Objektes überprüfen und danach handeln

thoff430

Mitglied
Hallo miteinander!

Ich muss hier wieder einmal einfache Aufgaben lösen und es hapert immer noch an der Umsetzung in Java.

Gearbeitet wird noch mit Greenfoot. Die Aufgabe:

Das Huhn Eier suchen lassen und sie dann ausbrüten (durch ein anderes Bild ersetzen, diese Aufgabe hab ich schon gelöst). Nun soll das Huhn aber auch aufhören bereits ausgebrütete Eier immer wieder ausbrüten zu wollen. Natürlich geht das einfach, in dem ich das Ei frage, ob es bereits ausgebrütet ist oder nicht und dementsprechend meine Methode ausführe oder halt nicht.

Ich bin aber immer noch in der Phase, in der ich erst herausfinde, wie Java eigentlich funktioniert.



Hier mal der Code, die wichtigen Stellen hab ich markiert, irrevante Methoden der Übersichtlichkeit halber entfernt. Das eigentliche Problem liegt in der Klasse Barnfield (ganz unten)

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


public class Egg  extends Actor
{
    public boolean hatched;
    
    public Egg () {
        hatched = false; 
    }
   
    public void hatch() {
        hatched = true;
        GreenfootImage hatched_egg = new GreenfootImage("egg_hatched.png");
        setImage(hatched_egg);
    }
    
    public boolean isHatched() {
        return hatched;
    }
}

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


public class Chicken  extends Actor
{
    private static final int EAST  = 0, WEST  = 1, NORTH = 2, SOUTH = 3;

    private int direction;
    private GreenfootImage chickenRight, chickenLeft;

    
    public Chicken () {
        chickenLeft = getImage();
        chickenRight  = new GreenfootImage(chickenLeft);
        chickenRight.mirrorHorizontally();
        setDirection(WEST);
    }


    /**
     * Check whether there is an egg in the same cell as we are.
     */
    public boolean foundEgg() {
        return getOneObjectAtOffset(0, 0, Egg.class) != null;
    }
    
             
    public void layEgg() {
        getWorld().addObject(new Egg (), getX (), getY ());
    }
    
    public Egg takeEgg() {
        Actor egg_actor = getOneObjectAtOffset(0, 0, Egg.class);
        if (egg_actor != null) {
            return (Egg) egg_actor;
        } else {
            ShowError ("There was no egg in this cell");
            return null;
        }
    }
 
             
}

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


public class Barnfield  extends Chicken
{
    //public boolean eggUnhatched = foundUnhatchedEgg ();

    private int eggsHatched;
    /**
     * Act - do whatever the Fryde wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() {
        hatchEggs ();
    }
    
    /**
     * Hatch an egg.
     */
    public void hatchEgg () {
         Egg egg_found = takeEgg ();
         egg_found.hatch();
         egg_found.hatched = true;
         eggsHatched++;
    }
    
    /**
     * Tells Fryde if she has 
     * has found an unhatched egg
     */
    public boolean foundUnhatchedEgg () { // dies sollten wir selbst erstellen. was mach ich hier falsch?
        if (hatched) { // hatched kann nicht gefunden werden, obwohl als public deklariert...
            return false; //.... dass es so nicht geht weiß ich, nur wie krieg ich den wert abgefragt?
        } 
        return true;
    }
    
    
        
    
    /**
     * Turn right
     */
    public void turnRight() {
        turn (); // from Barnfield
        turnLeft (); // inherited from Chicken
    }

    
    
    
    public boolean eggAhead () {
        if (canMove ()) {
            move ();
            if (foundEgg ()) {   // found an egg, have to go back
                moveBackwards ();
                return true;
            }
            else {   // there was no egg
                moveBackwards ();
                return false;
            }
        }
        else
            return false;
    }
    


    private void hatchEggs () {
        lookForEgg  ();
        if (canMove ()) {
            move ();
        }
        if (foundEgg ()) {
            hatchEgg ();
        }
    }

          
    

}
 
Zuletzt bearbeitet:

pro2

Bekanntes Mitglied
Hm, ziemlich viel Code aber sowas ähnliches müsste es sein:

Java:
private void findAndHatchEggs () {
        if (canMove ()) {
            move ();
            if (foundEgg () && !isHatched())
                hatchEgg ();
        }
    }

Einfach noch prüfen ob das Ei nicht ausgebrütet ist..
 

pro2

Bekanntes Mitglied
Öh also ich hab immer noch nicht ganz den Überblick aber eig. kannst du das hatched an unzähligen Stellen abfragen..

Java:
    public void hatchEgg () {
         Egg egg_found = takeEgg ();
         egg_found.hatch();
         egg_found.hatched = true;
         eggsHatched++;
    }

da z. B. über egg_found.isHatched();
oder in der hatch(); Methode in der Egg Klasse bevor du überhaupt was machst.

edit:
Dein
Java:
public boolean foundUnhatchedEgg () { // dies sollten wir selbst erstellen. was mach ich hier falsch?
        if (hatched) { // hatched kann nicht gefunden werden, obwohl als public deklariert...
            return false; //.... dass es so nicht geht weiß ich, nur wie krieg ich den wert abgefragt?
        } 
        return true;
    }

Macht natürlich kein Sinn, da du von irgendnem Egg, also einem Objekt, das hatched abfragen musst! Hier würdest du in der aktuellen Klasse das hatched abfragen, was es ja gar nicht gibt.
Du musst erst sowas machen wie in der hatchEgg() Funktion!
Code:
Egg egg_found = takeEgg ();
Da holst du dir das aktuelle Ei und dann kannst du prüfen ob von deinem egg_found.isHatched() == true ist.
 
Zuletzt bearbeitet:

thoff430

Mitglied
Genau an dem abfragen hapert es.



Es funktioniert auch nicht, wenn ich statt der Methode ein Attribut nehme. Was fehlt da, wieso wird weder die Methode noch das Attribut gefunden?

Ich habe bisher immer nur Attribute eines Objektes selbst abgefragt (zB, schaut das Huhn gerade nach Norden, ja oder nein?). Aber jetzt hab ich hier zwei Verschiedene Objekte. Das Huhn will etwas vom Ei wissen. Hier hab ich ein Brett vorm Kopf.

edit: ich schau mal was sich machen lässt
 

thoff430

Mitglied
Ich kriegs nicht hin, mein Kopf qualmt. Was muss ich da machen?

Einfach
Java:
Egg egg_found = takeEgg ();
da reinschreiben funktioniert nicht. Was ich hier grad fabriziere ist eher ein zielloses rumraten...
 

pro2

Bekanntes Mitglied
Ja das war ein doofes Beispiel von mir. Schau dir meinen 2. Post an, der erklärt es dir eigentlich!

Macht natürlich kein Sinn, da du von irgendnem Egg, also einem Objekt, das hatched abfragen musst! Hier würdest du in der aktuellen Klasse das hatched abfragen, was es ja gar nicht gibt.

Da hast du ja kein Objekt.
Wie gesagt erst per
Code:
Egg egg_found = takeEgg ();
das Ei auf dem aktuellen Feld HOLEN und dann kannst du seine egg_found.isHatched(); Funktion prüfen.

Mögliche Lösungen:

Java:
public void hatchEgg () {
         Egg egg_found = takeEgg ();
         if(!egg.found.isHatched()){
                  egg_found.hatch();
                  egg_found.hatched = true;
                  eggsHatched++;
         }
    }

ODER:

Java:
private void findAndHatchEggs () {
        Egg egg_found = takeEgg ();
        if (canMove ()) {
            move ();
            if (foundEgg () && !egg_found.isHatched())
                hatchEgg ();
        }
    }
ODER (wahrscheinlich das einfachste..):

Java:
public void hatch() {
        if(!isHatched){
                hatched = true;
                GreenfootImage hatched_egg = new GreenfootImage("egg_hatched.png");
                setImage(hatched_egg);
        }
    }
 
Zuletzt bearbeitet:

thoff430

Mitglied
Vielen Dank! Ich hatte echt Knoten im Kopf, werd die Lösungen noch im Detail studieren und mal mit dem vergleichen, was ich probiert habe.

In der Uni wurden wir einfach vor solchen Aufgaben gesetzt ohne uns erst überhaupt mit Java vertraut zu machen. Inzwischen werden einige Sachen aber klarer. Zum Glück ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
K Durch alle Attribute eines Objektes iterieren Java Basics - Anfänger-Themen 6
S Ermitteln und Setzen der Attribute eines Objektes Java Basics - Anfänger-Themen 6
V JNDI / LDAP Attribute eines Benutzers auslesen Java Basics - Anfänger-Themen 1
T Standardkonstruktor, Attribute initialisieren Java Basics - Anfänger-Themen 5
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
S Attribute zurücksetzen? Java Basics - Anfänger-Themen 2
K Sichtbarkeit protected: Attribute trotzdem aufrufbar. Java Basics - Anfänger-Themen 4
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
O Attribute die Methoden zählen Java Basics - Anfänger-Themen 5
L Attribute aus Klasse in berechnungs Methode übergeben Java Basics - Anfänger-Themen 1
Gaudimagspam Attribute einfügen private Java Basics - Anfänger-Themen 3
J final attribute erben Java Basics - Anfänger-Themen 2
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
B Infos zu Attribute in einer Klasse speichern Java Basics - Anfänger-Themen 3
S Objekt-Attribute "variabel" gestalten Java Basics - Anfänger-Themen 10
R Attribute mehrerer Objekte ausgeben Java Basics - Anfänger-Themen 3
D Abstrakte Klasse, Konstruktorkette, Attribute setzen Java Basics - Anfänger-Themen 12
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
F Attribute bei Objektorientierter Programmierung Java Basics - Anfänger-Themen 11
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
R Zwei Attribute gleichzeitig ausgeben Java Basics - Anfänger-Themen 12
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
S Zufallszahl (Statische Attribute und Methoden) Java Basics - Anfänger-Themen 10
K Public Attribute oder getter - funktioniert leider beides hier nicht Java Basics - Anfänger-Themen 5
X XML-Eintrag an Attribute erkennen Java Basics - Anfänger-Themen 2
W Erste Schritte füllen Attribute java Klasse in for Schleife und Array Java Basics - Anfänger-Themen 16
B Alle Attribute von Klasse bekommen und ändern Java Basics - Anfänger-Themen 12
R Objekt erstellen - Attribute mit mehreren Werten Java Basics - Anfänger-Themen 1
T Kann erbende Klasse Attribute der vererbenden Klasse anpassen (int -> float)? Java Basics - Anfänger-Themen 9
dat_vin OOP Hashmap und Attribute Java Basics - Anfänger-Themen 7
C OOP Array Objektverweise und Attribute Java Basics - Anfänger-Themen 5
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
O Unterschiedliche Attribute in Objekklasse? Java Basics - Anfänger-Themen 5
E Attribute von einem Objekt einer anderen Klasse ändern Java Basics - Anfänger-Themen 4
F Attribute von Feldinhalten erkennen Java Basics - Anfänger-Themen 6
A Variablen Attribute Java Basics - Anfänger-Themen 8
F konstante/variable Attribute? Java Basics - Anfänger-Themen 3
J Threads Zugriff auf Attribute Java Basics - Anfänger-Themen 16
M Wann statische Methoden/Attribute? Java Basics - Anfänger-Themen 2
ElfterDoktor Einen Objekt Attribute/Parameter geben & Auslesen Java Basics - Anfänger-Themen 4
R Zeigerfehler für Attribute Java Basics - Anfänger-Themen 11
L Vererbung Attributen der Oberklasse Attribute hinzufügen? Java Basics - Anfänger-Themen 3
F Im Konstruktor mit Settern auf private Attribute zugreifen - oder nicht? Java Basics - Anfänger-Themen 18
P Zugriff auf Attribute einer Klasse, zu der keine Verbindung besteht Java Basics - Anfänger-Themen 11
V OOP Statische Klassen-Attribute vererben Java Basics - Anfänger-Themen 4
M static Attribute und Vererbung Java Basics - Anfänger-Themen 11
S Warum sind Attribute der Klasse java.awt.Point public? Java Basics - Anfänger-Themen 3
K OOP Attribute von Klasse in die public class übertragen? Java Basics - Anfänger-Themen 7
E Fehler bei Klassenübergreifende Attribute / Konsturktoren Java Basics - Anfänger-Themen 2
P Attribute von Objekten in Vectoren überprüfen Java Basics - Anfänger-Themen 4
S Attribute darf nur Werte vom Intervall annehmen Java Basics - Anfänger-Themen 5
M Attribute Java Basics - Anfänger-Themen 8
M Attribute und Konstruktor Java Basics - Anfänger-Themen 5
J Attribute not settable warum ? Java Basics - Anfänger-Themen 6
N finale Attribute in abstrakten Basisklassen Java Basics - Anfänger-Themen 6
O Wie kann man das einfach lösen? (dynamisch viele Attribute) Java Basics - Anfänger-Themen 6
Q Zugriff auf Attribute einer Unterklasse Java Basics - Anfänger-Themen 7
S OOP Attribute Java Basics - Anfänger-Themen 2
T OOP StringTokenizer, Zuweisung der einzelnen Attribute Java Basics - Anfänger-Themen 21
K Klassen Attribute sortieren Java Basics - Anfänger-Themen 10
S Ausgabe bestimmter Attribute Java Basics - Anfänger-Themen 5
B die einzelnen Attribute einzeln vergleichen Java Basics - Anfänger-Themen 10
L E-Mail Attribute IMAP ändern Java Basics - Anfänger-Themen 4
K Attribute überschreiben! Java Basics - Anfänger-Themen 2
A Stilfrage: statische Methoden und Attribute auf jeden Fall verhindern? Java Basics - Anfänger-Themen 5
dataframe Attribute aus anderen Methoden übernehmen? Java Basics - Anfänger-Themen 14
M Zugriff auf Attribute über Methoden Java Basics - Anfänger-Themen 6
A statische Attribute: Vererbung und Zugriff darauf Java Basics - Anfänger-Themen 15
H Attribute auf Einzigartigkeit prüfen Java Basics - Anfänger-Themen 6
T Was sind Attribute? Java Basics - Anfänger-Themen 9
G Methode um Attribute auszulesen Java Basics - Anfänger-Themen 5
H attribute die zusammengehören Java Basics - Anfänger-Themen 9
G Wie kann ich auf die Attribute einer anderen Klasse zugreife Java Basics - Anfänger-Themen 5
J Auslesen aller Attribute mit JDOM Java Basics - Anfänger-Themen 15
N Unterschied statische Attribute u. Methoden <-> objekt Java Basics - Anfänger-Themen 4
M Attribute werden mit den Startwerten überschrieben. Warum? Java Basics - Anfänger-Themen 12
T Failed to load Main-Class manifest attribute from U.U.jar Java Basics - Anfänger-Themen 3
P Attribute Vererben Java Basics - Anfänger-Themen 2
Z Zugriff auf Attribute nach Zuweisung einer Referenz Java Basics - Anfänger-Themen 8
D Session Attribute in JSP ausgeben???? Java Basics - Anfänger-Themen 3
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
walid Öffnungszeiten eines Geschäftes Java Basics - Anfänger-Themen 3
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
B Synchronisation eines kleinen Museums Java Basics - Anfänger-Themen 47
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben