Methode soll andere Methode der selben Klasse aufrufen

Erazo

Aktives Mitglied
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?
 

Erazo

Aktives Mitglied
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?
 

temi

Top Contributor
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()).
 

Erazo

Aktives Mitglied
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();
    }
 
K

kneitzel

Gast
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?
 

Erazo

Aktives Mitglied
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);
 
K

kneitzel

Gast
Ok, das ändert die Farbe. Damit Du die Änderung siehst, musst Du die neu malen. Wo machst du das?
 

Erazo

Aktives Mitglied
Java:
   void setColour(Colour newColour) {
        ear.erase();
        colour = newColour;
        ear.draw();
    }
 
K

kneitzel

Gast
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!)
 

Erazo

Aktives Mitglied
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....
 
K

kneitzel

Gast
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 ....
 

Erazo

Aktives Mitglied
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
 

Erazo

Aktives Mitglied
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?
 

mihe7

Top Contributor
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.
 

Erazo

Aktives Mitglied
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);
 

Erazo

Aktives Mitglied
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();
        
    }
 

mihe7

Top Contributor
cannot make a static reference to a non static field
Und die Lösung ist die selbe, wie bei den vergangenen 500-mal: Du brauchst ein Objekt. Bei dem Code, den Du eben gezeigt hast, sollte der Fehler aber nicht auftreten, wenn Du keine Schweinereien (Schafereien) bei den Klassennamen gemacht hast.

Prinzipiell musst Du die wait()-Methode natürlich in Head implementieren, wenn beide Augen "gleichzeitig" geschlossen werden sollen.

Viel mehr würde mich interessieren, warum bei Dir ein Auge ein linkes und ein rechtes Augenlid besitzt... Malst Du zwei Striche, das Auge also so: /o\ ?
 

mihe7

Top Contributor
Die Objekte sind doch leftEyeLid und rightEyeLid?
Ich habe doch geschrieben, dass der Fehler bei diesem Code nicht auftreten dürfte. Wenn leftEye und rightEye sowie leftEyeLid und rightEyeLid Instanz-Variablen und keine Klassen sind, dann gibt es dort auch keine statische Referenz.

nein es ist ein Augenlid für jedes Auge.
Dein Code sagt etwas anderes. In der Klasse Eye hast Du
Java:
    void closeEyeLid() {
       leftEyeLid.draw();
       rightEyeLid.draw();
    }

Da ein Obekt der Klasse Eye aber ein einziges Auge darstellt, hätte dieses eine Auge zwei Augenlider.
 

Erazo

Aktives Mitglied
leftEye und rightEye werden hier erzeugt:
Java:
       leftEye = new Eye(10+xPos, 31+yPos, Colour.BLACK);
       rightEye = new Eye(50+xPos, 31+yPos, Colour.BLACK);
anhand des Konstruktors:
Java:
    Eye(int x, int y,Colour initialColour) {
        xPos = x;
        yPos = y;
        colour = initialColour;
        
        iris = new Ellipse(20, 20, xPos, yPos, Colour.BLACK);
        pupil = new Ellipse(8, 8,6 + xPos,7 + yPos, Colour.WHITE);
        rightEyeLid = new Ellipse(20, 20, xPos, yPos-3, Colour.GREEN);
        leftEyeLid = new Ellipse(20, 20 , xPos, yPos-3, Colour.GREEN);
}
 

Erazo

Aktives Mitglied
Ok, ich glaub ich sehe es jetzt. Ich erzeuge mit jedem Auge beide Augenliedider! Man könnte jetzt beide Augen in einem Objekt erzeugen aber dann kann ich nicht ein Auge zwinkern lassen.
 
K

kneitzel

Gast
Java:
        rightEyeLid = new Ellipse(20, 20, xPos, yPos-3, Colour.GREEN);
        leftEyeLid = new Ellipse(20, 20 , xPos, yPos-3, Colour.GREEN);

Schau Dir doch die beiden Ellipsen an. Was unterscheidet die beiden Ellipsen?

Ok, ich glaub ich sehe es jetzt. Ich erzeuge mit jedem Auge beide Augenliedider! Man könnte jetzt beide Augen in einem Objekt erzeugen aber dann kann ich nicht ein Auge zwinkern lassen.
Nein. Du erzeugst nicht mit jedem Auge beide Augenlider. Wie sollte das auch gehen? Die Augenlider sind doch relativ zu der Position des Auges. Das eine Auge kennt doch die Position nicht vom zweiten Auge - also wie sollte es da das Augenlid der anderen Auges malen?

Aber spiel doch etwas damit rum. Mal mal nur ein Auge von beiden. Wäre es so, dass jedes Auge beide Augenlider malen würde, dann würdest Du das ja gut erkennen können ...
 

Erazo

Aktives Mitglied
Java:
       leftEye = new Eye(10+xPos, 31+yPos, Colour.BLACK);
       rightEye = new Eye(50+xPos, 31+yPos, Colour.BLACK);

Java:
    Eye(int x, int y,Colour initialColour) {
        xPos = x;
        yPos = y;
        colour = initialColour;
        
        iris = new Ellipse(20, 20, xPos, yPos, Colour.BLACK);
        pupil = new Ellipse(8, 8,6 + xPos,7 + yPos, Colour.WHITE);
        eyeLid = new Ellipse(20, 20, xPos, yPos-3, Colour.GREEN);

Java:
    void closeEyeLid() {
        eyeLid.draw();
    }

so zeichne ich jetzt beide Augen. gibt es eine Möglichkeit bei der Erzeugung des Auges jedem eyeLid eine neue variable zuzuordnen damit ich die auch getrennt voneinander zeichnen kann? Oder muss ich für jedes Auge einen eigenen Konstruktor anlegen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
TheMenox Methoden Bestimmung an welche Methode eine andere Methode ihren Wert weitergeben soll Java Basics - Anfänger-Themen 35
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
kazzam94 Methode soll Array von Boolean zurückgeben Java Basics - Anfänger-Themen 5
scratchy1 Wie deklariert man eine Methode, die ein Objekt zurückgeben soll? Java Basics - Anfänger-Themen 22
P Methode soll Variable einer anderen Klasse ändern. Wie? Java Basics - Anfänger-Themen 1
kilopack15 Methode soll int-Array zurückgeben Java Basics - Anfänger-Themen 2
C Ein Button soll Focus rausfinden und Methode starten Java Basics - Anfänger-Themen 9
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
M Warum soll man die Finanlize Methode nicht überschreiben und aufrufen? Java Basics - Anfänger-Themen 2
S Methoden Methode soll String zurückgeben Java Basics - Anfänger-Themen 11
C Wo soll die Methode hin? Java Basics - Anfänger-Themen 2
P methode soll int zurückgeben Java Basics - Anfänger-Themen 13
P Vererbung Basisklasse soll eigene Methode benutzen Java Basics - Anfänger-Themen 38
M Methode soll zwei unterschiedliche primitives zurückgeben Java Basics - Anfänger-Themen 7
A Objekt soll Methode seines Erzeugers aufrufen Java Basics - Anfänger-Themen 15
zilti Methode will nicht tun, was sie soll Java Basics - Anfänger-Themen 20
S Methode soll ein neues Objekt vom Typ Class XYZ Java Basics - Anfänger-Themen 7
P Methode soll nichts erzeugen bei fehlenden Angaben Java Basics - Anfänger-Themen 6
T Rekursive Methode Java Basics - Anfänger-Themen 13
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
D next() Methode mehrfach verwenden Java Basics - Anfänger-Themen 1
Ostkreuz Methoden Von Dezimal zu Hexadezimal Methode toHex Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
N Throw an Main Methode übergeben Java Basics - Anfänger-Themen 7
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
M Anzahl Kommandozeilenparamter mittels Methode Java Basics - Anfänger-Themen 11
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
J Die statische Main-Methode ändert Instanzvariable? Java Basics - Anfänger-Themen 10
D Methode aus dem Aufrufer aufrufen Java Basics - Anfänger-Themen 1
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
D Warum kann ich hier nicht auf die Methode zugreifen? Java Basics - Anfänger-Themen 5
M generate Methode für Streams Java Basics - Anfänger-Themen 6
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
I Optionaler Parameter bei Methode, der nur optional ist? Java Basics - Anfänger-Themen 6
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
T Linked List set-Methode Java Basics - Anfänger-Themen 2
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
W Equals-Methode überschreiben bei composition Java Basics - Anfänger-Themen 20
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
V Methoden printChar Methode mit Rückgabetyp void Java Basics - Anfänger-Themen 26
F Graph Tiefensuche Methode Java Basics - Anfänger-Themen 7
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
berserkerdq2 wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun? Java Basics - Anfänger-Themen 11
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
S Methode Java Basics - Anfänger-Themen 4
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
U Methode wird genutzt, ohne dass ich die aufrufe? Java Basics - Anfänger-Themen 4
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
Liroyd Methode mit Objektvariabel rechnen? Java Basics - Anfänger-Themen 6
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
D Methode um mögliche Rezepte auszugeben Java Basics - Anfänger-Themen 12
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
J Hallo zusammen , was macht diese Methode hier genau? Java Basics - Anfänger-Themen 3
D Array in Main Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
G jButton führt Main Methode nicht richtig aus Java Basics - Anfänger-Themen 3
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
A Ein Array bearbeiten und in einer anderen Methode nutzen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben