Methode soll andere Methode der selben Klasse aufrufen

Hallo, Ich habe folgendes Problem:
Im Zuge der Animation eines Schafes soll es bei einem Schritt über eine Hilfsfunktion, die nur innerhalb der Klasse sichtbar sein soll(private) die Farben des Kopfes ändern. Dies soll aber durch eine andere Methode aufgerufen werden im Zuge derer das Schaf den Kopf senkt,den Bauch aufbläht und wieder hebt.

Ich habe das jetzt so versucht aber, es kommt die Fehlermeldung dass getSick() dafür static sein soll.
Java:
   public void eat() {
       head.lower(90);
       HelperClass.wait(1000);
       body.erase();
       body.setVerticalLength(160);
       rightFrontLeg.draw();
       rightRearLeg.draw();
       body.draw();
       leftRearLeg.draw();
       leftFrontLeg.draw();
       HelperClass.wait(1000);
       Sheep.getSick();
   
   
   }
   private void getSick() {
       head.setColour(Colour.GREEN);
       HelperClass.wait(1000);
   }
Ich vermute mal das Problem ist, dass ich wohl ein Objekt "sheep" erstellen muss über das ich die Methode dann aufrufe? Oder geht das auch ohne diese Zwischenlösung?
 
Was wäre denn die beste Variante? Ich könnte natürlich eine Ellipse erstellen die ich dann nie zeichne, aber es gibt doch sicher eine Art "Hilfobjekt" ohne Konstruktor?
 
In welcher Klasse befindet sich denn die Methode eat()?

Wenn sowohl eat() als auch getSick() in der selben Klasse sind, dann kannst du getSick() direkt aufrufen (Sheep.getSick()).
 
Der Kopf soll jetzt grün verfärbt werden. Dies klappt beim Gesicht wunderbar und auch der Rest der Methode funktioniert.
Nur die Augen bleiben warum auch immer rot.

Java:
   private void getSick() {
       head.setColour(Colour.GREEN);
       HelperClass.wait(1000);
   }

Java:
   void setColour(Colour newColour) {
       face.erase();
       face.colour = newColour;
       face.draw();
       leftEar.setColour(newColour);
       rightEar.setColour(newColour);
       leftEye.draw();
       rightEye.draw();
       leftNostril.draw();
       rightNostril.draw();
      
   }
Java:
   void setColour(Colour newColour) {
        ear.erase();
        colour = newColour;
        ear.draw();
    }
 
Wo meinst Du denn, dass Du die Farbe der Augen änderst?

Wenn Du etwas erwartest, dann musst Du schauen, wo Du denn den entsprechenden Code hast und ob er wirklich aufgerufen wird oder was da vorab passiert. Daher meine Frage; Wo / an welcher Stelle änderst Du die Farbe der Augen?
 
Wo meinst Du denn, dass Du die Farbe der Augen änderst?

Wenn Du etwas erwartest, dann musst Du schauen, wo Du denn den entsprechenden Code hast und ob er wirklich aufgerufen wird oder was da vorab passiert. Daher meine Frage; Wo / an welcher Stelle änderst Du die Farbe der Augen?
Sorry, meinte die Ohren
Java:
       leftEar.setColour(newColour);
       rightEar.setColour(newColour);
 
Bist Du das einmal durchgegangen? Was genau passiert da?

(So Du nicht ganz dubiose Konstrukte hast, ändert das setzen der Instanzvariable colour nichts an der Instanzvariable ear!)
 
Java:
   private void getSick() {
       head.setColour(Colour.GREEN);
       HelperClass.wait(1000);
   }
hier rufe ich setcolour auf und übergebe die Farbe grün

Java:
   void setColour(Colour newColour) {
       face.erase();
       face.colour = newColour;
       face.draw();
       leftEar.setColour(newColour);
       rightEar.setColour(newColour);
       leftEye.draw();
       rightEye.draw();
       leftNostril.draw();
       rightNostril.draw();
     
   }
hier wird die Farbe grün an face und die Ohren übergeben

Java:
   void setColour(Colour newColour) {
        ear.erase();
        colour = newColour;
        ear.draw();
    }
hier werden die Ohren gelöscht und neue grüne Ohren gezeichnet

Das ganze funktioniert ja beim Gesicht aber eben nicht bei dein Ohren. Liegt aber wahrscheinlich daran, dass das Geischt direkt den Typ Ellipse hat?

edit: ich hab den Fehler entdeckt: Es muss natürlich ear.colour heißen damit er die Farbe der Ohren ändert....
 
edit: ich hab den Fehler entdeckt: Es muss natürlich ear.colour heißen damit er die Farbe der Ohren ändert....
Wobei ich da durchaus anmerken würde, dass das Design etwas seltsam anmutet.

Wenn Du eh alles in der Ellipse ear hast, dann brauchst Du auch die Instanzvariable colour nicht, oder?
Was ist aber dann noch in der Klasse Ear enthalten? Wenn das alles jetzt reduziert wird auf eine Instanzvariable ear, dann ist tatsächlich die Frage, in wie weit da die Klasse so noch Sinn macht und ob man das nicht etwas anders aufbaut.

Aber erst einmal gut, dass Du das Problem erkannt hast. Evtl. würde ich Dir aber raten, dich einmal mit einem Debugger vertraut zu machen, damit Du Schritt für Schritt durchgehen kannst um zu sehen, was er wann ändert (oder eben auch nicht). Dann hätte man z.B. sehen können, dass Du die Instanzvariablen colour und ear hast und dass das setzen von colour natürlich ear nicht verändert ....
 
der Aufgabe ist vorgegeben und ich hab keinen Einfluss darauf. In ear hab ich aber noch viele andere Methoden für andere Schritte der Animation
 
Es soll bei der Aufgabe ansetzen aber nun Animationen eingebaut werden. Aber der Aufbau ist der selbe, ja
Was genau ist denn damit gemeint, dass der Aufbau seltsam ist?
 
Der Code:
Java:
   void setColour(Colour newColour) {
        ear.erase();
        colour = newColour;
        ear.draw();
    }
mutet etwas seltsam an, wenn sich dieser in einer Klasse Ear befindet und dort eine Variable "ear" verwendet wird: man geht intuitiv davon aus, dass ear eine Instanz von Ear referenziert, vermutlich handelt es sich aber um eine Ellipse.
 
nein ear hat eine eigene Klasse und wird dort so aufgebaut:
Java:
Ear(int x, int y, Colour initialColour) {
xPos = x;
yPos = y;
ear = new Ellipse(50, 20, xPos, yPos, Colour.RED);
 
Ich will zwei Methoden implementieren:
die eine soll 2 Augenlider zeichnen(Schaaf schläft)
die andere soll diese wieder löschen(Schaf wacht auf)

ich hab das jetzt so gemacht aber dann tauchen in der animation zwar beide Augenlider gleichzeitig auf aber das eine verschwindet eine Sekunde früher als das andere. Es liegt daran, dass es in meiner Vraiante 2 mal gezeichnet wird und dann durch die wait Methode das andere 1 sekunde später verschwindet. Wenn ich aber in Head einfach nur Auf openEyeLid() zugreifen will funktioniert es nicht mit der Fehlermeldung (cannot make a static reference to a non static field)

Java:
    void sleep() {
        leftEye.closeEyeLid();
        rightEye.closeEyeLid();
   }
    
    void wakeUp() {
        leftEye.openEyeLid();
        rightEye.openEyeLid();

        
    }


Java:
    void closeEyeLid() {
       leftEyeLid.draw();
       rightEyeLid.draw();
    }
    
    void openEyeLid() {
        HelperClass.wait(1000);
        leftEyeLid.erase();
        rightEyeLid.erase();
        
    }
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben