Compiler-Fehler Objektmethode aus einer statischen Methode heraus aufrufen

Kamaling

Mitglied
Ich habe eine Klasse Main, in der sich eine statische Methode "auktion" befindet. Ich habe weiter eine Klasse Mensch und eine Klasse Produkt. Die main-Methode soll die statische Methode auktion aufrufen, welche unter zwei Objekten vom Typ Mensch eine Auktion um das Objekt vom Typ Produkt abhaelt, indem sie die Objektmethode "biete" aus der Klasse Mensch aufruft (Das ganze soll mir danach als Grundlage zur Uebung mit Threads etc. dienen).
Sicher ist es wieder mal ganz einfach, bloss mein Holzkopf kommt nicht drauf.
Ich erhalte in Zeile mit diesem Code: egon.auktion(einProdukt);
folgende Fehlermeldung:
Code:
error: cannot find symbol
egon.auktion(einProdukt);
  symbol:   method auktion(Produkt)
  location: variable egon of type Mensch
Ob sich folgende Zeile dann compilieren liesse weiss ich noch nicht, da das compilieren soweit noch nicht geklappt hat:
System.out.println(mensch.biete());
Hier der Code der Klasse Main:
Java:
public class Main{
    public static void main(String[] args){
        Mensch egon = new Mensch("Egon");
        Mensch knut = new Mensch("Knut");
        Produkt einProdukt = new Produkt("Ein Produkt");
        egon.auktion(einProdukt);
    }

    public static void auktion(Mensch mensch, Produkt produkt){
        System.out.println(mensch.biete());
    }
}
Hier der Code in der Klasse Mensch:
Java:
public class Mensch{
    private final String name;
    int gebot = 0;

    public Mensch(String name){
        this.name = name;
    }  

    public String getName(){
        return name;
    }

    public int biete(){
        return gebot;
    }
}
Und hier noch der Code aus der Klasse Produkt:
Java:
public class Produkt{
    private final String produktName;   

    public Produkt(String produktName){
        this.produktName = produktName;
    }

    public void getProduktName(){
        return produktName;
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Was genau erwartest du dir von dieser Zeiler?
Java:
egon.auktion(einProdukt);
Außerdem frage ich mich wozu du bei der statischen Methode auktion in der Klasse main (daher denke nochmal über deine Zeile da oben nach^^) ein Produkt übergibst, da du damit nichts machst.
Alles in allem: das Design ist einfach nur schlecht, verwirf es komplett und beginne von Neuem 😉
 
benutz bitte code tags.
Deine Menschen Klasse hat nunmal einfach keine Methode auktion. Stattdessen hast du eine Methode in deiner Main Klasse welche als ersten Parameter einen Mensch und als zweiten ein Produkt erhält.

Und bevor du mit Threads anfängst, solltest du dir besser noch mal die Grundlagen von Java anschauen.
 
Was genau erwartest du dir von dieser Zeiler?
Java:
egon.auktion(einProdukt);
Außerdem frage ich mich wozu du bei der statischen Methode auktion in der Klasse main (daher denke nochmal über deine Zeile da oben nach^^) ein Produkt übergibst, da du damit nichts machst.
Alles in allem: das Design ist einfach nur schlecht, verwirf es komplett und beginne von Neuem 😉

Ich erwarte das was ich ganz oben beschrieben habe: Die statische Methode auktion soll eine Auktion zwischen zwei Menschen über ein Produkt ausführen.
Ich schreibe
Java:
egon.auktion(einProdukt);
weil ich angenommen habe, dass die Methode so aufgerufen werden kann. Was ich erreichen will ist klar, welche Klassen mir zur Verfügung stehen auch und auch welche Methode was tun soll.
Ich hoffe dass mir als Anfänger dabei jemand wohlwollend weiterhilft.

benutz bitte code tags.
Deine Menschen Klasse hat nunmal einfach keine Methode auktion. Stattdessen hast du eine Methode in deiner Main Klasse welche als ersten Parameter einen Mensch und als zweiten ein Produkt erhält.

Und bevor du mit Threads anfängst, solltest du dir besser noch mal die Grundlagen von Java anschauen.
Klar hat sie keine Methode auktion. Diese ist ja als statische in der Klasse Main definiert.
Beschränke deine Hilfe doch bitte auf das Thema. Ob und wann ich für die Threads bereit bin, ist hier nicht die Sache.
 
Wenn du nichtmals in der Lage bist eine Methode korrekt aufzurufen, sind Threads und co nunmal sehr weit entfernt. Wie gesagt, solltest du dir ein x-beliebiges Grundlagen Buch/Tutorial anschauen und schon würdest du sehen dass deine auktions Methode wie folgt aufgerufen werden müsste:
Java:
auktion(egon, produkt);

edit:
und mit egon.IRGENDWAS sagst du eben, dass du IRGENDWAS innerhalb von egon suchst und NICHT in der Main
 
Doch es ist sehr wohl die Sache ob du für Threads bereit bist. Du weißt noch nicht wie man Methoden aufruft und das sind nun mal die Basics.
Lies dir bitte die Grundlagen von Java bzw OOP durch, denn auf dem Wissensstand auf dem du bist kann man dir nicht vernünftig helfen.
 
Doch es ist sehr wohl die Sache ob du für Threads bereit bist. Du weißt noch nicht wie man Methoden aufruft und das sind nun mal die Basics.
Lies dir bitte die Grundlagen von Java bzw OOP durch, denn auf dem Wissensstand auf dem du bist kann man dir nicht vernünftig helfen.

Dann vergiss doch das mit den Threads einfach. Ich frage ja garnicht nach Threads sondern nach einer Problemlösung die überhaupt nichts mit Threads zutun hat 🙂
 
Und ich habe dir gerade erläutert warum es keinen Sinn hat dir hier die Lösung zu zeigen, wenn du nicht mal Methoden richtig aufrufen kannst. Da fehlen dir einfach die Basics und die musst du einfach noch lernen. Davor brauchst du nicht mal daran zu denken ein lauffähiges Programm zu schreiben.
 
Wenn du nichtmals in der Lage bist eine Methode korrekt aufzurufen, sind Threads und co nunmal sehr weit entfernt. Wie gesagt, solltest du dir ein x-beliebiges Grundlagen Buch/Tutorial anschauen und schon würdest du sehen dass deine auktions Methode wie folgt aufgerufen werden müsste:
Java:
auktion(egon, produkt);

edit:
und mit egon.IRGENDWAS sagst du eben, dass du IRGENDWAS innerhalb von egon suchst und NICHT in der Main

Diese Art es aufzurufen war die allererste die ich versucht habe und erhielt folgenden Fehler:
Java:
error: cannot find symbol
auktion.egon(einProdukt);
Wenn es so einfach gewesen wäre, hätte ich nicht nachgefragt ^^
Aber es ist wohl wahr, dass ich besser diesen Standartaufruf in meiner Frage gepostet hätte. Dann hätte man sich vielleicht mehr um das Problem als um die Threads Sache bemüht.
 
Das ist doch schon wieder was anderes...Schau dir nochmal an was ich geschrieben:
Java:
auktion(egon, produkt);
und was du nun geschrieben hast:
Java:
auktion.egon(einProdukt);
Merkste den Unterschied?
 
Das ist doch schon wieder was anderes...Schau dir nochmal an was ich geschrieben:
Java:
auktion(egon, produkt);
und was du nun geschrieben hast:
Java:
auktion.egon(einProdukt);
Merkste den Unterschied?

Du hat wohl übersehen dass Produkt ein Objekttyp ist und kein Objekt.
Versuche ich es so wie du es machen würdest, erhalte ich klarerweise folgende Fehlermeldungen:
Java:
error: cannot find symbol
                auktion.egon(Produkt);
                                    ^
  symbol:   variable Produkt
  location: class Main
error: cannot find symbol
                auktion.egon(Produkt);
                ^
  symbol:   variable auktion
  location: Main
2 errors
 
Und vorallem machst du die ganze Zeit den gleichen Fehler.
auktion.egon ist nunmal einfach vollkommener Schwachsinn.
Mach doch einfach so wie geschrieben, so schwer ist das doch nicht...
Java:
auktion(egon, einProdukt);
und NICHT auktion.egon...
 
Du erhältst diese Antworten weil du sie dir verdienst! Du hast noch immer nicht vestanden was der Unterschied zwischen
Java:
auktion.egon(einProdukt)
was absoluter Blödsinn ist und
Code:
auktion(egon, einProdukt)
ist. Und zweitere Variante funktioniert, die Tatsache dass es bei dir nicht kompiliert zeigt nur, dass du nicht mal die richtige Lösung, die du hier schon ca. 5x bekommen hast, in dein Programm einbauen kannst. Warum? Weil dir die absoluten Basics fehlen!
 
Du erhältst diese Antworten weil du sie dir verdienst! Du hast noch immer nicht vestanden was der Unterschied zwischen
Java:
auktion.egon(einProdukt)
was absoluter Blödsinn ist und
Code:
auktion(egon, einProdukt)
ist. Und zweitere Variante funktioniert, die Tatsache dass es bei dir nicht kompiliert zeigt nur, dass du nicht mal die richtige Lösung, die du hier schon ca. 5x bekommen hast, in dein Programm einbauen kannst. Warum? Weil dir die absoluten Basics fehlen!

Du hast recht. Hätte man mir zu Beginn einfach und schlicht:
Code:
auktion(egon, einProdukt)
geantwortet, hätte ich es gleich verstanden. Aber unter all den Pöbeleien und dem Rumgehacke zu Beginn, ist mir das erst zum Schluss aufgefallen.
Danke für die klare Hilfestellung ^^
 
Du hast die richtige Lösung als 3. Antwort (deine nicht mitgezählt, also Post #5) bekommen. Das war ganz zu Beginn.

EDIT: übrigens habe ich dir als erste Antwort bewusst nicht gleich die Lösung gepostet sondern den Hinweis drauf gegeben was falsch ist um dich zum Nachdenken zu bewegen, was daran falsch ist.
 
Vielleicht hättet ihr es einfach beim Thema belassen sollen und nicht die Hilfeleistung damit beginnen, dass der eine meint ich solle alles in die Tonne treten und der andere anfängt über Threads zu reden.
Nichtsdestotrotz Danke
 
Das sagen wir nicht aus Boshaftigkeit, sondern damit du was lernst. Das Design ist einfach nicht gut, wenn du bei einer Methode einen Parameter hast mit dem du nichts machst. Aber das alleine ist gar nicht so schlimm.
Deine Auktion ist schlichtweg keine Auktion. Bei dir können Menschen auf ein Produkt bieten, das Produkt bekommt davon nichts mit, das Gebot wird nirgends gespeichert...
Du hast zwar in der Klasse Mensch das Attribut int gebot, das aber immer 0 ist, da die Methode biete nur diesen Wert retourniert. Es kommt also immer 0 zurück, dieser Wert wird nicht weiter verwendet.
Aber selbst wenn der Wert gebot angepasst werden würde bringt das nichts, denn ein Mensch kann ja wohl auch auf mehrere Produkte bieten. Welches Gebot wird dann gespeichert?

Wie du siehst, meine Aussage ist nicht unberechtigt, das Design ist einfach zum Wegwerfen.
Daher haben wir dir auch den Tipp gegeben den ich nochmal wiederholen möchte: lerne die Grundlagen von OOP. Wie werden Objekte modelliert und wie setzt man das in Code um, etc.
Das ist absolut essentiell, daran führt leider kein Weg vorbei. Und solange du das noch nicht beherrscht können wir dir leider nicht helfen.
 
Vielleicht hättet ihr es einfach beim Thema belassen sollen und nicht die Hilfeleistung damit beginnen, dass der eine meint ich solle alles in die Tonne treten und der andere anfängt über Threads zu reden.
Nichtsdestotrotz Danke
Wenn du nicht möchtest, dass über Threads gesprochen wird, solltest du es auch nicht tun. Du hast das Thema in deinem Eröffnungsposting selbst eingeführt. Falls du es da nur nebenbei erwähnen wolltest, solltest du es anderen auch zugestehen, eine Bemerkung dazu zu machen. Es war ja nur ein gut gemeinter Rat, den du ignorieren kannst.
Außerdem hast du bereits in Posting #2 und #3 von @flopalko und @InfectedBytes die entscheidenden Hinweise erhalten, mit denen du dich aber offenbar zu oberflächlich auseinandergesetzt hast.
Viele Leute versuchen hier, Hilfestellungen in der Form zu geben, dass man sie nur verwerten kann, wenn man sie einigermaßen verstanden hat. Das klappt natürlich nicht immer optimal, ist aber meines Erachtens ein sehr vernünftiger Ansatz.
 
Das sagen wir nicht aus Boshaftigkeit, sondern damit du was lernst. Das Design ist einfach nicht gut, wenn du bei einer Methode einen Parameter hast mit dem du nichts machst. Aber das alleine ist gar nicht so schlimm.
Deine Auktion ist schlichtweg keine Auktion. Bei dir können Menschen auf ein Produkt bieten, das Produkt bekommt davon nichts mit, das Gebot wird nirgends gespeichert...
Du hast zwar in der Klasse Mensch das Attribut int gebot, das aber immer 0 ist, da die Methode biete nur diesen Wert retourniert. Es kommt also immer 0 zurück, dieser Wert wird nicht weiter verwendet.
Aber selbst wenn der Wert gebot angepasst werden würde bringt das nichts, denn ein Mensch kann ja wohl auch auf mehrere Produkte bieten. Welches Gebot wird dann gespeichert?

Wie du siehst, meine Aussage ist nicht unberechtigt, das Design ist einfach zum Wegwerfen.
Daher haben wir dir auch den Tipp gegeben den ich nochmal wiederholen möchte: lerne die Grundlagen von OOP. Wie werden Objekte modelliert und wie setzt man das in Code um, etc.
Das ist absolut essentiell, daran führt leider kein Weg vorbei. Und solange du das noch nicht beherrscht können wir dir leider nicht helfen.

Natürlich tut die Methode so nichts und wäre so völlig sinnlos. Aber wieso sollte ich euch mit zig Zeilen Code zu spammen wenn das Problem lediglich beim Aufruf liegt.
Deshalb habe ich den Inhalt so abgespeckt, dass nur die Objekte erstellt und die Methoden aufgerufen werden. Inhalt ist in diesen Klassen und Methoden keiner gepostet. Wie gesagt, es ging mir ja lediglich um den Aufruf.
 
Trotzdem merkt man am Aufbau und dem Fehlen von essentiellen Klassen für so ein Auktionssystem, dass das Design einfach schlecht ist und du es daher von Grund auf neu programmieren solltest 😉
 
Wenn du nicht möchtest, dass über Threads gesprochen wird, solltest du es auch nicht tun. Du hast das Thema in deinem Eröffnungsposting selbst eingeführt. Falls du es da nur nebenbei erwähnen wolltest, solltest du es anderen auch zugestehen, eine Bemerkung dazu zu machen. Es war ja nur ein gut gemeinter Rat, den du ignorieren kannst.
Außerdem hast du bereits in Posting #2 und #3 von @flopalko und @InfectedBytes die entscheidenden Hinweise erhalten, mit denen du dich aber offenbar zu oberflächlich auseinandergesetzt hast.
Viele Leute versuchen hier, Hilfestellungen in der Form zu geben, dass man sie nur verwerten kann, wenn man sie einigermaßen verstanden hat. Das klappt natürlich nicht immer optimal, ist aber meines Erachtens ein sehr vernünftiger Ansatz.

Ich hatte (leider) die Threads in Klammern erwähnt. Stimmt.... und in Verbindung mit den inhaltslosen Objekten und Methoden verstehe ich dass ein agressiver User schnell mal zu solchen Belehrungen greift:
Wenn du nichtmals in der Lage bist eine Methode korrekt aufzurufen, sind Threads und co nunmal sehr weit entfernt. Wie gesagt, solltest du dir ein x-beliebiges Grundlagen Buch/Tutorial anschauen und schon würdest du sehen dass deine auktions Methode wie folgt aufgerufen werden....

Aber hey... wenn man Fragen über Methodenaufrufe nur über das besagte Grundlagenbuch erhalten soll, wäre dieser Forenbereich sehr fragwürdig.
 
Trotzdem merkt man am Aufbau und dem Fehlen von essentiellen Klassen für so ein Auktionssystem, dass das Design einfach schlecht ist und du es daher von Grund auf neu programmieren solltest 😉
Ich finde nicht, dass die Auktion wie vorgeschlagen in die Klasse Mensch gehört. Diese finde ich im Masse der Möglichkeiten eines Anfängers, in einer statischen Methode korrekt platziert. Dass es dann noch Objekte von Bietern und Objekte die versteigert werden sollen gibt, ist notwendig.
Und wie gesagt. ich habe nicht nach Aufbauhilfe bei der Programmstruktur, sondern nach Hilfe für den Methodenaufruf gefragt.
 
Aber hey... wenn man Fragen über Methodenaufrufe nur über das besagte Grundlagenbuch erhalten soll, wäre dieser Forenbereich sehr fragwürdig.
Nein ist er nicht. Du hast einfach keine Einsicht. Es gibt sehr wohl auch Grundlagen Themen die eine Daseinsberechtigung haben. Schau dir einfach mal 99% der anderen Threads hier an.
Deine Frage ist aber auf so einem niedrigen Level, dass man hier nicht mal mit Hilfestellungen dir die Lösung näher bringen kann (hat man ja gesehen wozu das führt).
Eine vernünftige Frage hier ist zB: Ich habe folgendes Problem, so habe ich versucht es zu lösen, der Fehler liegt vermutlich hier, wie kann ich es besser machen usw.
Es benötigt ein Grundverständnis, sonst hat man keine Gesprächsbasis. Und allein der Aufruf der Methode so wie du es versucht hast hat einfach gezeigt, dass diese Basis fehlt. Und eben diese können wir dir nicht in dem Thread näher bringen, die musst du dir selbst beibringen (zB über ein gutes Grundlagenbuch).
Und das hat alles nichts damit zu tun, dass irgendwer von uns hier aggressiv ist, sondern wir dir versucht haben zu helfen und du zig Mal nicht drauf eingegangen bist, bei deinem Methodenaufruf geblieben bist und einfach alle Hinweise (und fertige Lösungen!) ignoriert hast. Da fühlen wir uns halt auch vollkommen verarscht!
 
Ich finde nicht, dass die Auktion wie vorgeschlagen in die Klasse Mensch gehört. Diese finde ich im Masse der Möglichkeiten eines Anfängers, in einer statischen Methode korrekt platziert. Dass es dann noch Objekte von Bietern und Objekte die versteigert werden sollen gibt, ist notwendig.
Und wie gesagt. ich habe nicht nach Aufbauhilfe bei der Programmstruktur, sondern nach Hilfe für den Methodenaufruf gefragt.
Ich habe auch nicht gesagt dass die Auktion in die Klasse Mensch gehört. Dafür sollte es eine eigene Klasse geben. Aber nachdem du nicht danach gefragt hast und die Struktur nicht Thema ist werde ich das auch nicht genau ausführen.
Ich habe dies schlichtweg erwähnt, um dir den Rat zu geben bei 0 neu anzufangen, da dieses Programm so nicht sinnvoll ist. Auf deinem Wissensstand ist es ratsamer ein Grundlagenbuch zu lesen und dann Beispiele zu programmieren und mit einer Referenzlösung zu vergleichen um zu sehen wie man es besser machen kann.
 
Ich hatte (leider) die Threads in Klammern erwähnt. Stimmt.... und in Verbindung mit den inhaltslosen Objekten und Methoden verstehe ich dass ein agressiver User schnell mal zu solchen Belehrungen greift:
Wenn du nichtmals in der Lage bist eine Methode korrekt aufzurufen, sind Threads und co nunmal sehr weit entfernt. Wie gesagt, solltest du dir ein x-beliebiges Grundlagen Buch/Tutorial anschauen und schon würdest du sehen dass deine auktions Methode wie folgt aufgerufen werden müsste...
Ich finde es nicht korrekt, wie du hier zitierst und @InfectedBytes das Attribut "aggresiver User" verpasst, als wenn das seine direkte Reaktion auf deine beiläufige Erwähnung von Threads gewesen wäre. Im Anschluß an seine Hinweise hat er lediglich folgendes geschrieben:
Und bevor du mit Threads anfängst, solltest du dir besser noch mal die Grundlagen von Java anschauen.
Ich finde nicht, dass das aggresiv war, sondern konsruktiv. Du hättest es dabei bewenden lassen können. Stattdessen hast du so geantwortet:
Beschränke deine Hilfe doch bitte auf das Thema. Ob und wann ich für die Threads bereit bin, ist hier nicht die Sache.
Erst danach kam ein etwas schärferer Tonfall von ihm.
 
Ich finde es nicht korrekt, wie du hier zitierst und @InfectedBytes das Attribut "aggresiver User" verpasst, als wenn das seine direkte Reaktion auf deine beiläufige Erwähnung von Threads gewesen wäre. Im Anschluß an seine Hinweise hat er lediglich folgendes geschrieben:
Ich finde nicht, dass das aggresiv war, sondern konsruktiv. Du hättest es dabei bewenden lassen können. Stattdessen hast du so geantwortet:
Erst danach kam ein etwas schärferer Tonfall von ihm.

Richtig. Und hätte man mir zu Beginn einfach nur direkt auf meine Frage geantwortet, anstelle alles andere in Frage zu stellen, wäre dieses Thema nach 2 Beiträgen zu einem konstruktiven Ende gekommen.
Danke
 
Wie bereits erwähnt hat man dir direkt auf die Frage geantwortet. Ich wollte dich dazu bewegen selbst die Lösung rauszufinden und bei Post #5 hast du die funktionierende Lösung bekommen.
Wenn du Themen die nicht primär was mit dem Thread zu tun haben ins Spiel bringst darfst du nicht angepisst/verletzt/wasauchimmer sein wenn wir darauf eingehen. Dass du dann in deiner Ehre so verletzt bist, dass du nicht mal die Lösung in dein Programm einbauen kannst liegt nur an dir.

Du willst jetzt allerdings uns die Schuld dafür in die Schuhe schieben und das sehe ich beim besten Willen nicht ein. Wir sind adäquat auf deine Frage eingegangen, haben dir geholfen und du weinst jetzt rum wie ein 3-jähriges Kind dessen Eiskugel aus dem Stanitzl (ja so heißt das in Österreich, für die Deutschen hier: Eistüte 😉) auf den Boden gefallen ist.
 
Ich bin hierher gekommen weil ich gehofft habe auf eine einfache Frage (siehe Thementitel) eine einfache und anständige Antwort zu bekommen.
Stattdessen trampelt man im ersten Post auf allem rum was ich gepostet habe ohne auf die Frage auch nur im geringsten einzugehen und im zweiten Post noch auf mir persönlich.
Damit hat sich das Thema Forenhilfe hier bereits gegessen.
Ich sehe darin nichts konstruktives, nichts motivierendes und nichts womit man damit jemandem helfen würde. Dabei sagt ihr selber wie einfach es gewesen wäre.
Ich hoffe dass dieses Vorgehen die Ausnahme ist.
Kein Inhalt rechtfertigt es alles und jeden erstmal niederzutrampeln.
Um nachzuvollziehen dass hier Hilfe mit Demütigung verwechselt wurde ist kein Code sondern Menschenverstand gefragt.
Ich denke damit haben alle alles gesagt und das Thema kann meinetwegen geschlossen werden.
 
Es wurde dir direkt geholfen...
Lösung aus Beitrag #3:
Deine Menschen Klasse hat nunmal einfach keine Methode auktion. Stattdessen hast du eine Methode in deiner Main Klasse welche als ersten Parameter einen Mensch und als zweiten ein Produkt erhält.

Lösung aus Beitrag #5
Java:
auktion(egon, produkt);

Lösung aus Beitrag #10
Das ist doch schon wieder was anderes...Schau dir nochmal an was ich geschrieben:
Java:
auktion(egon, produkt);
und was du nun geschrieben hast:
Java:
auktion.egon(einProdukt);

Und es geht immer weiter...
Es wurde dir zig mal die korrekte Lösung gesagt, du hast es einfach nur vollkommen ignoriert oder nicht verstanden.
 

Zurück
Oben